【发布时间】:2017-12-24 10:24:25
【问题描述】:
我正在尝试了解泛型类型的使用,当我在尝试一些代码行时发现了一些奇怪的东西。
第一段代码在一个名为“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, true, 一个字符串]
这让我很困惑,因为arr 是Integer 类型的ArrayList,它怎么能包含boolean 和String 类型的对象?函数func 中的列表是否转换为原始类型(这意味着它变为泛型类型Object)?如果是这样,怎么可能,因为你不能这样做,例如:List<Integer> arr = new ArrayList<Object>();?
希望对此进行一些澄清,也许它会帮助我更好地掌握泛型类型这一主题。谢谢!
【问题讨论】:
-
你应该阅读raw types和heap pollution。
标签: java collections generic-collections