簡體   English   中英

Java泛型 <T> 和泛型一樣?

[英]java Generic<T> same as Generic?

根據Java中的類型擦除的理論,我認為以下兩個代碼段應編譯為相同的Java類,從而具有相同的字節碼。

public class Generic {
    private Object t;

    public void hi() {
        System.out.println(t);
    }
}

javac Generic.java

mv Generic.class Generic1.class

public class Generic<T> {
    private T t;

    public void hi() {
        System.out.println(t);
    }
}

javac Generic.java

mv Generic.class Generic2.class

將Generic1.class與Generic2.class進行比較,它們是完全不同的。

那我的想法怎么了? 以及泛型如何編譯為字節碼?


[編輯]

javap -v不錯的提示,謝謝。

但是我無法在短時間內獲得對字節碼的詳細了解。

我想知道泛型是否使用T擦除編譯到對象。

此處的類中的方法確實具有相同的字節碼 ,但是字節碼並不是類文件中唯一的內容。

類文件還包含類及其成員的聲明,包括類的超類和實現接口,其方法的參數和返回類型,其字段的類型等。所有這些聲明都保留泛型(以便編譯類以后可以單獨針對此類進行檢查)。 因此,類文件是不同的。

類型擦除 (不是類型擦除)並不意味着您的兩個示例將具有相同的字節碼,這基本上意味着,如果您可以手動對非通用遺留類型進行類型轉換,或者編譯器將對參數化類型為您進行類型轉換(否運行時開銷)。

暫無
暫無

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

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