2017-06-06 84 views

回答

1

這通過彙編:

LinkedList<?> list1 = new LinkedList<String>(); 

這不:

LinkedList<Object> list2 = new LinkedList<String>(); 

LinkedList<?>變量可以分配任何LinkedList<SomeType>。一個LinkedList<Object>變量只能被分配一個LinkedList<Object>(或一個原始的LinkedList,這是不建議使用的)。

在另一方面以下add

LinkedList<?> list1 = new LinkedList<String>(); 
list1.add("x"); 

不通過編譯,而下面的功能:

LinkedList<Object> list2 = new LinkedList<Object>(); 
list2.add("x"); 
+0

爲什麼我不能在列表1中添加任何字符串? – karan

+0

我認爲這裏的主要觀點是泛型是_invariant_。這是爲了節省泛型類型安全性,否則下面的代碼可能拋出類拋出異常:'List li = new ArrayList (); 列表 ln = li; //非法 ln.add(new Float(3.1415));'所以'''是爲了這個目的而創建的。 – asdasdsdf

+0

@karan因爲'list1'可能被分配了任何通用LinkedList('LinkedList ','LinkedList '等等),所以編譯器不知道哪些元素可以安全地添加到它。 – Eran

相關問題