问题一:
基本上,这是 Java 语言所禁止的。这在Java Language Specification for generics中有介绍。
当你使用
ArrayList<Integer>[] pl2 = new ArrayList[10]; // warning
您会收到编译器警告,因为以下示例将编译(为每一行代码生成警告):
ArrayList wrongRawArrayList = new ArrayList(); // warning
wrongRawArrayList.add("string1"); // warning
wrongRawArrayList.add("string2"); // warning
pl2[0] = wrongRawArrayList; // warning
但是现在你应该包含ArrayList
of 的数组Integer
包含完全错误ArrayList
的String
对象。
问题2:
正如已经回答的那样,声明p12
为您提供编译时检查,并使您在从ArrayList
.
稍微修改了前面的例子:
ArrayList<Integer>[] pl2 = new ArrayList[10]; // warning
ArrayList<String> wrongArrayList = new ArrayList<String>(); // OK!
wrongArrayList.add("string1"); // OK!
wrongArrayList.add("string2"); // OK!
pl2[0] = wrongArrayList; // ERROR
现在,由于您使用的是泛型,因此无法编译。但是如果你使用
ArrayList[] pl2 = new ArrayList[10];
您将得到与第一个示例相同的结果。