繁体   English   中英

为什么 Java 上的 instanceof 会出现编译错误?

[英]Why does instanceof on Java give a compilation error?

class A {}
class B extends A {}
class C extends A {}
A x = new B();
B y = new B();
x instanceof C
y instanceof C

x instanceof C工作正常时,为什么y instanceof C会给出编译错误(不兼容的类型)?

当编译器可以判断y instanceof C永远无法返回true时,它会产生编译错误。 y的编译时间类型是B ,并且 class B与 class C没有关系。 因此, class B的实例永远不能是 class C的实例。

另一方面, x instanceof C可能返回true ,因为x的编译时类型是A ,并且CA的子类。

JLS参考:

15.20.2。 类型比较运算符 instanceof

如果将 RelationalExpression 转换为 ReferenceType 将作为编译时错误被拒绝,则 instanceof 关系表达式同样会产生编译时错误。 在这种情况下,instanceof 表达式的结果永远不会为真。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM