这两行有什么区别:
ArrayList<Integer> iList = new ArrayList<Integer>();
ArrayList iList = new ArrayList<Integer>();
第1步:引发编译时错误
public static void main(String args[]){
ArrayList<Integer> iList = new ArrayList<Integer>();
iList.add(10);
iList.add("Test_Element"); // Compiler error, while trying to insert a String in an Integer ArrayList
System.out.print("Value of 2nd element: " + iList.get(1));
}
第2步:运行正常
public static void main(String args[]){
ArrayList iList = new ArrayList<Integer>();
iList.add(10);
iList.add("Test_Element"); // works fine, while trying to insert a String in an Integer ArrayList
System.out.print("Value of 2nd element: " + iList.get(1));
}
输出: 第二个元素的值:Test_Element
我预计会出现类似的错误
“ ArrayList中的add(java.lang.Integer)无法应用于(java.lang.String)”,但是在第二步中,它可以正常工作。
任何人都可以向我解释一下,为什么我可以在此列表中插入一个字符串。
答案 0 :(得分:0)
编写ArrayList
时,没有对泛型ArrayList list = new ArrayList<Integer>()
进行编译时检查。基本上忽略赋值表达式右侧的泛型类型。 ArrayList
并没有真正的内在类型,只是T
中的ArrayList<T>
可帮助您确保仅对{{1}的实例执行操作}。
了解为什么要在同一T
中混合使用整数和字符串是很有用的-这里可能有设计异味:)