您好我正在使用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
答案 0 :(得分:1)
在编译时检查Java Generics
。表示编译器可以检查通用列表,如果字符串List
是Integer
,则可以显示错误。而在第一种情况下。它是non-generic
,编译器无法在编译时判断
另请阅读Type Erasure
答案 1 :(得分:0)
firstList.addAll(secondList);
firstList
是字符串的类型
secondList
是数字类型
在第一个示例中,您使用的是原始类型,但在第二个示例中,您使用的是泛型(指定列表用于字符串)
如果在编译时使用泛型检查donet。如果使用原始列表,它将在运行时完成
答案 2 :(得分:0)
List secondList=new ArrayList(); //without generic
这意味着List<Object> secondList=new ArrayList<Object>();
,因此您可以添加任何对象。
但是如果你明确提到类型,很明显你不能将字符串添加到整数列表,在你的第二种情况下
答案 3 :(得分: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 );