class person
public class test else
}
上面的例子執行:
equal
這裡列印出equal的原因,list和list、list擦除後的型別都是list,沒有任何區別。
其實泛型的class物件都是相同的,泛型化不會改變class屬性的返回值。
再看看下面的例子:
private void generictest(listargs)
private void generictest(listargs)
private void generictest(listargs)
method generictest(list) has the same erasure generictest(list) as another method in type test
這裡過載這幾個方法的時候,最後報出的提示時,這幾個泛型方法,在擦除後的型別都是list,所以報錯了。 Java中的泛型擦除
有著樣一種泛型的用法 class selfbounded 這就像兩面鏡子,兩個鏡子之間永遠看不到頭,selfbounded接受t作為泛型引數,t又由擁有t引數的selfbounded作為邊界限定。這就叫做迴圈泛型,為了理解這種命名,看下面一段 class generictype class curi...
java泛型 擦除的補償
1 為什麼需要補償 由於擦除,我們無法直接得到泛型引數的型別資訊。所以任何執行時需要型別資訊的操作都不能工作。例如 1 無法使用instanceof關鍵字 2 無法通過new操作建立乙個泛型引數型別的物件 3 無法建立泛型陣列 public class erase 編譯錯誤 t var new t ...
泛型擦除補償
由於在使用泛型的時候,將會擦除型別引數,而只保留原始型別。所以在使用泛型時,我們不能使用new t 也不能使用instanceof,因為這兩類操作要知道確切的型別。此問題的解決方案有三種 設計模式的使用 簡單工廠 最簡單 工廠方法 最靈活 模板方法 最簡捷 1.簡單工廠 在此方法中,將型別作為引數,...