ArrayList <integer> iList = new ArrayList <integer>();之间的区别和ArrayList iList = new ArrayList <integer>();

时间:2019-01-03 07:10:26

标签: java generics arraylist

这两行有什么区别:

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)”,但是在第二步中,它可以正常工作。

任何人都可以向我解释一下,为什么我可以在此列表中插入一个字符串。

1 个答案:

答案 0 :(得分:0)

编写ArrayList时,没有对泛型ArrayList list = new ArrayList<Integer>()进行编译时检查。基本上忽略赋值表达式右侧的泛型类型。 ArrayList并没有真正的内在类型,只是T中的ArrayList<T>可帮助您确保仅对{{1}的实例执行操作}。

了解为什么要在同一T中混合使用整数和字符串是很有用的-这里可能有设计异味:)