簡體   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