Java中的instanceof – 为什么不编译?
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的validation),那么它会更有用..它不会吗?
还是我错过了一些明显的东西?
根据JLS§15.20.2,这是一个编译错误:
如果将RelationalExpression转换为ReferenceType将作为编译时错误被拒绝,则关系表达式的
instanceof
同样会产生编译时错误。 在这种情况下,instanceof
表达式的结果永远不会成立。
RelationalExpression是instanceof
的第一个操作数, ReferenceType是第二个。
除了arshajii的答案, 如果你想避免编译时错误并希望运行时的真/假结果来检查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
- Java .equals()instanceof子类? 为什么不调用超类等于而不是最终?
- 如何使用编译时genericsvalidation替换运行时instanceof检查
- 经常使用instanceof是一种好习惯吗?
- Java:如何检查对象是否是非静态内部类的实例,而不管外部对象是什么?
- java优化nitpick:在投射之前调用instanceof进行检查是否更快投出一些东西并让它抛出exception?
- “instanceof Void”总是返回false吗?
- Java:instanceof Generic
- Java – 是否有像instanceof这样的“子类”?
- “instanceof List”和“o instanceof List ”之间的区别