Java 1.6:创建List <T>的数组
为什么我不能创建一个List数组?
List<String>[] nav = new List<String>[] { new ArrayList<String>() };
Eclipse说“无法创建列表的通用数组”
要么
ArrayList<String>[] nav = new ArrayList<String>[] { new ArrayList<String>() };
Eclipse说“无法创建ArrayList的通用数组”
要么
List<String>[] getListsOfStrings() { List<String> groupA = new ArrayList<String>();
List<String> groupB = new ArrayList<String>();
return new List<String>[] { groupA, groupB };
}
但是我可以这样做:
List[] getLists() { return new List[] { new ArrayList(), new ArrayList() };
}
Eclipse表示List和ArrayList是原始类型,但可以编译…
看起来很简单,为什么不起作用?
回答:
好吧,泛型教程为你的问题提供了答案。
数组对象的组件类型可能不是类型变量或参数化类型,除非它是(无界)通配符类型。你可以声明其元素类型是类型变量或参数化类型的数组类型,但不能声明数组对象。
当然,这很烦人。为避免出现以下情况,必须使用此限制:
// Not really allowed.List<String>[] lsa = new List<String>[10];
Object o = lsa;
Object[] oa = (Object[]) o;
List<Integer> li = new ArrayList<Integer>();
li.add(new Integer(3));
// Unsound, but passes run time store check
oa[1] = li;
// Run-time error: ClassCastException.
String s = lsa[1].get(0);
如果允许使用参数化类型的数组,则前面的示例将在编译时没有任何未经检查的警告,但会在运行时失败。我们已经将类型安全性作为泛型的主要设计目标。
以上是 Java 1.6:创建List <T>的数组 的全部内容, 来源链接: utcz.com/qa/423000.html