2009-06-10 62 views
1

假設我有一類 和我想的地方使用它作爲一個泛型類型:java是否也在用戶定義的泛型類中實現了類型擦除?

class MyList<T> 
{ 
    T[] list=T[10]; 

    public void add(T element) 
    { 
     list[0]=element; 
    } 
} 

編譯後,它刪除它的類型信息,如它是泛型集合的情況?

我不需要在任何地方使用這個代碼,所以請不要在發現錯誤集中。我只想通過這段代碼問一個普遍的問題,那就是編譯後會列出實例變量是Object類的類型。

+2

好,在這種情況下,它不會,因爲該代碼將不會編譯:你無法創建一個通用的陣列,以及類的參數不匹配,其變量其實 – kdgregory 2009-06-10 11:50:29

+1

的參數,在這段代碼根本沒有創建通用數組......我沒有在那裏看到任何「新」: - ) – 2009-06-10 13:10:22

+0

T implicity擴展了Object,因此即使在編譯期間T也只是一個具有少量編譯時間檢查的對象。 – 2010-07-22 22:25:59

回答

5

我什至不知道那會編譯。它至少應該提供警告。

這裏的問題是數組是協變的。泛型不是。這意味着泛型不會在運行時保留類型信息。陣列呢。

而且是適用於所有的通用類型,包括用戶自定義。