问题 1:
基本上,这是Java语言禁止的。这在泛型的 Java 语言规范中有所介绍。
当您使用时
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
Integer
ArrayList
String
问题 2:
正如已经回答的那样,声明 of 为您提供了编译时检查,并使您在从 中获取项目时免于使用强制转换。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];
您将获得与第一个示例中相同的结果。