2014-10-02 120 views
0

我注意到可以像這樣定義一個變量,而不必指定它的泛型類型。 雖然這似乎是編譯的,但是當我將它用於更復雜的類時,我注意到了一些奇怪的問題,例如不再正確地拾取方法簽名。當我使用一種放棄泛型類型的事物時,這些問題就消失了。沒有任何泛型類型集的ArrayList意味着什麼?

下面的代碼有什麼實際用途嗎,它和使用ArrayList<?>代替它有什麼不同?

Class Example { 
    private ArrayList list; 
} 

回答

2

原始類型的集合,保持與前泛型的Java版本的兼容性原因(即< 5)。

除非存在兼容性問題,否則不鼓勵使用它們的用法。

非通用ArrayList就像沒有任何類型安全的ArrayList<Object>

由於類型擦除,方法簽名不保留參數化的泛型類型,所以這在重載方法時通常是混淆的來源。

2

這是允許向後兼容的,在Java 5泛型不存在之前,當它們添加它們時,它們不想破壞現有代碼。

大多數編譯器/集成開發環境將會給你一個警告,但在概念上卻是一樣的做ArrayList<Object>