通用数组创建错误

时间:2011-08-20 12:08:06

标签: java arrays generics

我正在尝试这样的事情: -

public static ArrayList<myObject>[] a = new ArrayList<myObject>[2];

myObject是一个类。我收到此错误: - 创建通用数组(箭头指向新的。)

5 个答案:

答案 0 :(得分:52)

您不能拥有泛型类数组。 Java根本不支持它。

您应该考虑使用集合而不是数组。例如,

public static ArrayList<List<MyObject>> a = new ArrayList<List<MyObject>();

另一个“解决方法”是创建像这样的辅助类

class MyObjectArrayList extends ArrayList<MyObject> { }

然后创建一个MyObjectArrayList数组。


这是一个good article,说明为什么语言中不允许这样做。本文给出了以下示例:如果允许,可能会发生什么:

List<String>[] lsa = new List<String>[10]; // illegal
Object[] oa = lsa;  // OK because List<String> is a subtype of Object
List<Integer> li = new ArrayList<Integer>();
li.add(new Integer(3));
oa[0] = li; 
String s = lsa[0].get(0); 

答案 1 :(得分:9)

创建通用数组比使用List更简单。

首先,让

public static ArrayList<myObject>[] a = new ArrayList[2];

然后初始化

for(int i = 0; i < a.length; i++) {
     a[i] = new ArrayList<myObject>();
}

答案 2 :(得分:5)

你可以做到

public static ArrayList<myObject>[] a = (ArrayList<myObject>[])new ArrayList<?>[2];

public static ArrayList<myObject>[] a = (ArrayList<myObject>[])new ArrayList[2];

(前者可能更好。)两者都会导致未经检查的警告,您可以使用以下几点忽略或抑制:@SuppressWarnings(“unchecked”)

答案 3 :(得分:-1)

如果您尝试声明泛型类的arraylist,可以尝试:

public static ArrayList<MyObject> a = new ArrayList<MyObject>();

这会给你一个myobject的arraylist(大小10),或者如果你只需要一个2号的arraylist你可以这样做:

public static ArrayList<MyObject> a = new ArrayList<MyObject>(2);
或者你可能正试图制作一个arraylists的arraylist:

public static ArrayList<ArrayList<MyObject>> a = new ArrayList<ArrayList<MyObject>>();

虽然我不确定我说的最后一句是否正确......

答案 4 :(得分:-1)

在我看来,你使用了错误的括号类型。您无法定义泛型数组的原因是类型擦除

另外,声明变量“a”是脆弱的,它应该是这样的:

List<myObject>[] a;

当您可以使用界面时,请不要使用具体类。