我想了解泛型类型的用法,并且当我试验一些代码行时,我发现有些奇怪的东西。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