簡體   English   中英

帶有自定義/核心類的instanceof

[英]instanceof with custom/core classes

為什么我可以使用instanceof針對我的自定義界面測試我的自定義類,我無法對java核心類做同樣的事情?

interface A{}
class B{}
public class Tmp {
    public static void main(String [] args) {
        String s = "";
        Integer i = 1;
        B b = new B();
        System.out.println(s instanceof A); //1
        System.out.println(i instanceof A); //2
        System.out.println(b instanceof A); //3
    }
}

第1行和第2行不會編譯。 第3行將編譯(並打印為false )。 有什么不同?

如果編譯器可以檢測到instanceof操作永遠不會為true,則會生成編譯器錯誤。 它通過遵循與投射相同的規則來確定這一點。 具體規則在JLS的第15.20.2節中描述:

如果將RelationalExpression轉換為ReferenceType將作為編譯時錯誤被拒絕,則關系表達式的實例同樣會產生編譯時錯誤。 在這種情況下,instanceof表達式的結果永遠不會成立。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM