奇怪的是我刚刚意识到:
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);
结果是&#34;你好我的朋友&#34; ! ......这不符合文档中的规定,因为结果应为整数!
还有其他可能的解释吗?
答案 0 :(得分:3)
泛型是编译时检查。一旦你开始使用原始类型,所有的赌注都会被取消......你是谁。这是为什么原始类型是危险的,不应该在新代码中使用。
答案 1 :(得分:1)
List l2
不是通用的,因此它基本上是List<Object>
,当您使用非通用列表时,添加到它的所有内容都变为Object
,您可以自行决定使用它们正确的,或者你会得到ClassCastException
s。
答案 2 :(得分:0)
如果你已经将l2声明为泛型,那么你就会得到一个编译时错误(如果你的编译器被配置为抱怨这些东西)。
final List<Integer> l2 = l1;