我注意到可以像這樣定義一個變量,而不必指定它的泛型類型。 雖然這似乎是編譯的,但是當我將它用於更復雜的類時,我注意到了一些奇怪的問題,例如不再正確地拾取方法簽名。當我使用一種放棄泛型類型的事物時,這些問題就消失了。沒有任何泛型類型集的ArrayList意味着什麼?
下面的代碼有什麼實際用途嗎,它和使用ArrayList<?>
代替它有什麼不同?
Class Example {
private ArrayList list;
}
我注意到可以像這樣定義一個變量,而不必指定它的泛型類型。 雖然這似乎是編譯的,但是當我將它用於更復雜的類時,我注意到了一些奇怪的問題,例如不再正確地拾取方法簽名。當我使用一種放棄泛型類型的事物時,這些問題就消失了。沒有任何泛型類型集的ArrayList意味着什麼?
下面的代碼有什麼實際用途嗎,它和使用ArrayList<?>
代替它有什麼不同?
Class Example {
private ArrayList list;
}
原始類型的集合,保持與前泛型的Java版本的兼容性原因(即< 5)。
除非存在兼容性問題,否則不鼓勵使用它們的用法。
非通用ArrayList
就像沒有任何類型安全的ArrayList<Object>
。
由於類型擦除,方法簽名不保留參數化的泛型類型,所以這在重載方法時通常是混淆的來源。
這是允許向後兼容的,在Java 5泛型不存在之前,當它們添加它們時,它們不想破壞現有代碼。
大多數編譯器/集成開發環境將會給你一個警告,但在概念上卻是一樣的做ArrayList<Object>