我想了解泛型類型的用法,並且當我試驗一些代碼行時,我發現有些奇怪的東西。Java - 泛型類型和集合
的代碼的第一部分是一個名爲「A」類中:
public void func(int k, List list) {
list.add(9);
list.add(true);
list.add("a string");
}
代碼的第二部分是在不同的類,主要功能內:
List<Integer> arr = new ArrayList<Integer>();
arr.add(14);
System.out.println(arr.toString());
a.func(8, arr);
System.out.println(arr.toString());
運行被印刷在該行代碼的結果:
[14]
[14,9,真實,字符串]
這讓我很困惑,因爲arr
是Integer
類型的ArrayList
,怎麼可以包含boolean
類型和String
的對象?是否將函數func
中的列表轉換爲原始類型(這意味着它變爲泛型類型Object
)?如果是的話,怎麼可能,因爲你不能這樣做,例如:List<Integer> arr = new ArrayList<Object>();
?
想了解一下這個,也許它會幫助我更好地掌握泛型類型的這個主題。謝謝!
你應該閱讀有關[RAW類型(https://docs.oracle.com/javase/tutorial/ java/generics/rawTypes.html)和[堆污染](https://docs.oracle.com/javase/tutorial/java/generics/nonReifiableVarargsType.html#heap_pollution)。 – Flown