【发布时间】:2014-01-22 23:18:36
【问题描述】:
我知道当对象是特定类的实例时 instanceof 返回 TRUE。例如:
B extends A
C extends A
B b = new B();
C c = new C();
b instanceof A // returns TRUE
到目前为止一切都很好,所以让我们输入一些看起来应该返回 false 的内容:
c instanceof B // won't compile (error: inconvertible types)
这不会编译,这是有道理的,因为它允许在编译时发现疏忽。但是,instanceof 什么时候返回 false 呢?似乎只有两个选项是 TRUE 和 ERROR。我能想到的唯一例外是:
null instanceof A // returns FALSE
但是按照与上面相同的逻辑,这似乎也应该在编译时被捕获。
我在这里缺少什么? true / error 是唯一实用的选项,还是可以以更有意义的方式实际返回 false,除了将 null 作为参考变量给出?
【问题讨论】:
-
那是 safaris 拼写检查器。考虑上面的伪代码。 ;)
-
(Object)c instanceof B将编译。c instanceof B无法编译的原因是编译器可以静态确定对C的引用永远不能是B。
标签: java instanceof