Почему я не могу использовать переменную с проверкой типа в первом условии как переменную с приведенным типом во втором условии? - PullRequest
0 голосов
/ 07 апреля 2020
class A
{
    boolean foo() {
        return true;
    }
}

Почему синтаксическая ошибка приведена ниже?
Метод не определен для типа

if(a instanceOf A && a.foo()) {
.....
}

Это прекрасно работает -

if(a instanceOf A && ((A)a).foo()) {
.....
}

Ответы [ 2 ]

1 голос
/ 07 апреля 2020

Ранее оператор instanceof просто возвращал true или false и не влиял на типы его операндов.

По состоянию на Java 14, instanceof поддерживает сопоставление с шаблоном (или см. Spe c preview здесь ). Вы можете объявить новую встроенную переменную, которая будет иметь целевой тип instanceof, если и только если проверка прошла успешно.

Например, ваш код будет выглядеть как

if(a instanceof A actual && actual.foo()) {
    // ...
}
1 голос
/ 07 апреля 2020

Для человека ясно, что a относится к типу A из-за проверки instanceof. Хотя компилятор не работает так, и вам все равно нужно привести a к A.

...