[英]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
,并且C
是A
的子类。
JLS参考:
如果将 RelationalExpression 转换为 ReferenceType 将作为编译时错误被拒绝,则 instanceof 关系表达式同样会产生编译时错误。 在这种情况下,instanceof 表达式的结果永远不会为真。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.