[英]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.