2010-10-13 146 views
3
List listOne = new LinkedList<Shxx>();  
List<Shxx> listTwo = new LinkedList<Shxx>(); 
List listThree = new LinkedList(); 
List<Shxx> listFour = new LinkedList(); 
+4

簡短的回答:使用第二個版本,丟棄其餘的 – 2010-10-13 08:51:02

回答

7
List listOne = new LinkedList<Shxx>(); 

丟掉類型信息,不妨使用泛型。

List<Shxx> listTwo = new LinkedList<Shxx>(); 

正確使用泛型,提供類型安全。

List listThree = new LinkedList(); 

沒有使用泛型(即預Java 5代碼),沒有類型安全。

List<Shxx> listFour = new LinkedList(); 

將導致編譯器警告,但否則可以,因爲該列表只能通過類型安全引用使用,並且最初爲空。不應該做任何事情,因爲如果你忽略關於使用原始類型的編譯器警告,那麼你也可能會忽略那些與此不一樣的其他人。從泛型中獲得最大類型安全的最好方法是消除所有相關的編譯器警告。

+0

偉大但你的意思是什麼「可能」?在第一點,你的意思是插入的元素將像對象類型的句柄? – MineIsMine 2010-10-13 09:04:17

+0

請:這是'你',而不是'你'。 – 2010-10-13 09:11:27

+0

對不起原諒我的這個錯誤 – MineIsMine 2010-10-13 09:18:20

1

listOnelistThree將只在代碼對象(additionnally,您的IDE可能會顯示這兩個警告,由於listOne instanciation意味着一個未經檢查中使用的檢查收集的,而listThree instanciation是原料使用的清單可用什麼應該是一個檢查收集)。

對於這兩個列表,您將能夠添加任何類型的對象(String作爲原型示例)。

listTwo被宣稱爲Shxx的經典List

對於此列表,編譯器將只允許您添加Shxx類型的項目。

listFour編譯宣言,使作爲Shxx一個List列表可用(如listTwo)(但我不會這樣的推薦寫)。

最後,雖然這些列表在您的聲明代碼中不會以相同的方式使用,但您必須知道它們在運行時都是相同的(但您在理論上無法克服這些泛型限制很久以前)。

+0

@聲明listFour編譯對我來說很好。 – 2010-10-13 08:54:37

+0

@Michael_Borgwardt mmh,是的,你是的,對,我會相應地改變我的答案 – Riduidel 2010-10-13 09:06:26

+0

謝謝>>>>>它與我合作。 – MineIsMine 2010-10-13 09:22:48

相關問題