class A { boolean foo() { return true; } }
Почему синтаксическая ошибка приведена ниже? Метод не определен для типа
if(a instanceOf A && a.foo()) { ..... }
Это прекрасно работает -
if(a instanceOf A && ((A)a).foo()) { ..... }
Ранее оператор instanceof просто возвращал true или false и не влиял на типы его операндов.
instanceof
true
false
По состоянию на Java 14, instanceof поддерживает сопоставление с шаблоном (или см. Spe c preview здесь ). Вы можете объявить новую встроенную переменную, которая будет иметь целевой тип instanceof, если и только если проверка прошла успешно.
Например, ваш код будет выглядеть как
if(a instanceof A actual && actual.foo()) { // ... }
Для человека ясно, что a относится к типу A из-за проверки instanceof. Хотя компилятор не работает так, и вам все равно нужно привести a к A.
a
A