参见英文答案 > Java generics type erasure: when and what happens? 7个
我正在尝试学习泛型类型的使用,当我尝试使用某些代码行时,我注意到了一些奇怪的东西.
第一段代码位于名为“A”的类中:
public void func(int k,List list) {
list.add(9);
list.add(true);
list.add("a string");
}
Liststem.out.println(arr.toString());
a.func(8,arr);
System.out.println(arr.toString());
运行代码会导致打印以下行:
[14]
[14,9,true,a string]
这让我非常困惑,因为arr是一个Integer类型的ArrayList,它如何包含boolean和String类型的对象?是否将函数func中的列表转换为原始类型(这意味着它变为泛型类型的Object)?如果是这样,怎么可能,因为你不能这样做,例如:List< Integer> arr = new ArrayList< Object>();?
希望对此有所澄清,也许它会帮助我更好地掌握这类通用类型的主题.谢谢!
public class ArrayList
在创建ArrayList的新实例时,会创建一个可以保存任何类型对象的新Object []数组.只能通过使用通用类型参数来实现类型安全.
由于List没有提供任何Type参数,因此它使用了rawtype,并且可以将任何内容添加到列表中.因此,请始终确保推断模板参数以保持类型安全.
public void func(int k,List
你永远不应该使用rawtypes.根据您的编译器设置,将省略警告.
最好使用(绑定/未绑定)通配符.
原文地址:https://www.jb51.cc/java/437423.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。