1

嗨,我正在使用 Collection 框架的 addAll 方法。请在下面找到我的代码。对于代码 1,它工作正常。对于代码 2,它给了我编译错误。我不知道为什么它没有给我代码 1 的错误。请给出原因。

代码 1

 public static void main(String[] args) {
    List<Integer> firstList=new ArrayList<Integer>();
    List secondList=new ArrayList();                        //without generic

    secondList.add("string value");

    firstList.addAll(secondList);
    System.out.println(firstList);

}

输出:

[string value]

代码 2

         public static void main(String[] args) {
    List<Integer> firstList=new ArrayList<Integer>();
    List<String> secondList=new ArrayList<String>();        //with generic  

    secondList.add("string value");

    firstList.addAll(secondList);
    System.out.println(firstList);

}

输出

     compilation error
4

4 回答 4

1

JavaGenerics在编译时被检查。List意味着编译器可以检查泛型列表,如果 String是 to则可以显示错误Integer。而在第一种情况下。它是一个non-generic,编译器在编译时无法判断。
另请阅读Type Erasure

于 2013-05-15T10:05:17.223 回答
0
 firstList.addAll(secondList);

firstList是字符串的类型

secondList是数字的类型

在第一个示例中,您使用的是原始类型,但在第二个示例中,您使用的是泛型(指定列表用于字符串)

看这里

如果您在编译时使用泛型检查 donet。如果您使用原始列表,它将在运行时完成

于 2013-05-15T10:03:44.847 回答
0
List secondList=new ArrayList();                        //without generic

这意味着List<Object> secondList=new ArrayList<Object>();您可以向其中添加任何对象。

但是,如果您明确提及类型,很明显您不能将字符串添加到整数列表中,在第二种情况下

于 2013-05-15T10:06:21.867 回答
0

您正在尝试将String存储桶中的所有值添加到专门分配给Integer.

你可以这样做

ArrayList commonList =new ArrayList(); // for all objects
List<String> stringList =new ArrayList<String>();        
List<Integer> integerList =new ArrayList<Integer>();     
stringList.add("string value");
integerList.add(1);
commonList .addAll(stringList);
commonList .addAll(integerList);
System.out.println(commonList );
于 2013-05-15T10:10:55.420 回答