Generic array creation error
本问题已经有最佳答案,请猛点这里访问。
我正在尝试这样做:
1 | public static ArrayList<myObject>[] a = new ArrayList<myObject>[2]; |
MyObject是一个类。我遇到此错误:-创建通用数组(箭头指向"新建")。
不能有泛型类数组。Java根本不支持它。
您应该考虑使用集合而不是数组。例如,
1 | public static ArrayList<List<MyObject>> a = new ArrayList<List<MyObject>(); |
另一个"解决方法"是创建这样的辅助类
1 | class MyObjectArrayList extends ArrayList<MyObject> { } |
然后创建一个
这是一篇很好的文章,说明为什么在语言中不允许这样做。本文给出了如果允许可能发生的情况的以下示例:
1 2 3 4 5 6 |
有一种比使用list更容易创建泛型数组的方法。
首先,让
1 |
然后初始化
1 2 3 | for(int i = 0; i < a.length; i++) { a[i] = new ArrayList<myObject>(); } |
你可以做到
1 | public static ArrayList<myObject>[] a = (ArrayList<myObject>[])new ArrayList<?>[2]; |
或
1 |
(前者可能更好。)两者都会导致未选中的警告,您可以使用:@suppress warnings("unchecked")忽略或取消选中这些警告。
在我看来,你用的括号类型不对。无法定义泛型数组的原因是类型擦除。
另外,您变量"a"的声明是脆弱的,应该这样看:
1 | List<myObject>[] a; |
当可以使用接口时,不要使用具体的类。
如果试图声明泛型类的ArrayList,可以尝试:
1 | public static ArrayList<MyObject> a = new ArrayList<MyObject>(); |
这将为您提供MyObject(大小10)的ArrayList,或者如果您只需要大小2的ArrayList,则可以执行以下操作:
1 | public static ArrayList<MyObject> a = new ArrayList<MyObject>(2); |
或者您可能试图创建数组列表:
1 | public static ArrayList<ArrayList<MyObject>> a = new ArrayList<ArrayList<MyObject>>(); |
虽然我不确定我说的最后一句话是否正确…