[英]Unexpected behavior using generics with Java Collections
我刚刚意识到的事情很奇怪:
Java文档指出List集合具有方法T get(int index)...如您所见,该方法返回T
但是我可以做到:
List<Integer> l1 = new ArrayList<>();
l1.add(1);
List l2 = l1;
l2.add("Hello my friend");
Object o2 = l1.get(1);
System.out.println(o2);
结果是“你好我的朋友”! ...这不符合文档中所述,因为结果应为Integer!
还有其他可能的解释吗?
泛型是编译时检查。 一旦开始使用原始类型,所有赌注都将关闭。 这就是为什么原始类型很危险,并且绝对不能在新代码中使用的原因。
List l2
不是通用的,因此它基本上是List<Object>
,当您使用非通用列表时,添加到列表中的所有内容都将成为Object
,由您来正确使用它们,否则您将得到ClassCastException
。
如果您将l2声明为泛型,那么您将得到一个编译时错误(如果您的编译器配置为抱怨这些事情)。
final List<Integer> l2 = l1;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.