Instanceof в Java - почему это не компилируется?
class A {
public static void main(String...args) {
Integer var = 10;
if(var instanceof Character) // Line1
System.out.println("var is a Character");
}
}
Я знаю, что строка 1 не будет компилироваться, потому что компилятор обнаружил, что var
не является Character
.
Я не понимаю, почему компилятор выдает ошибку вместо возврата false
или true
.
Если компилятор возвращает false
или true
(например, рассматривая операцию instanceof
как регулярную проверку на основе if), тогда она будет намного полезнее... не так ли?
Или я пропущу что-то очевидное?
Ответы
Ответ 1
Это ошибка компиляции в соответствии с JLS §15.20.2:
Если преобразование RelationalExpression в ReferenceType будет отклонено как ошибка времени компиляции, то реляционное выражение instanceof
также создает ошибку времени компиляции. В такой ситуации результат выражения instanceof
никогда не может быть правдой.
RelationalExpression - первый операнд instanceof
, а ReferenceType - второй.
Ответ 2
В дополнение к ответу arshajii , если вы хотите избежать ошибки времени компиляции и хотите получить результат true/false во время выполнения для проверки того, является ли var экземпляром Character, используйте код следующим образом:
if(var.getClass().isAssignableFrom(Character.class))
System.out.println("var is a Character");
else
System.out.println("var is NOT a Character");
Как и следовало ожидать, он будет печатать:
var is NOT a Character