-4
Java中的LinkedList<?>
和LinkedList<Object>
之間是否有區別?LinkedList <?>與LinkedList之間的區別<Object>
Java中的LinkedList<?>
和LinkedList<Object>
之間是否有區別?LinkedList <?>與LinkedList之間的區別<Object>
這通過彙編:
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");
爲什麼我不能在列表1中添加任何字符串? – karan
我認爲這裏的主要觀點是泛型是_invariant_。這是爲了節省泛型類型安全性,否則下面的代碼可能拋出類拋出異常:'List li = new ArrayList (); 列表 ln = li; //非法 ln.add(new Float(3.1415));'所以'''是爲了這個目的而創建的。 –
asdasdsdf
@karan因爲'list1'可能被分配了任何通用LinkedList('LinkedList','LinkedList '等等),所以編譯器不知道哪些元素可以安全地添加到它。 –
Eran