Java 通用数组创建错误
我正在尝试这样做:-Java 通用数组创建错误,java,arrays,generics,Java,Arrays,Generics,我正在尝试这样做:- public static ArrayList<myObject>[] a = new ArrayList<myObject>[2]; publicstaticarraylist[]a=newarraylist[2]; myObject是一个类。我遇到以下错误:-泛型数组创建(箭头指向new)。不能有泛型类的数组。Java根本不支持它 你应该考虑使用集合而不是数组。比如说, public static ArrayList<List<M
public static ArrayList<myObject>[] a = new ArrayList<myObject>[2];
publicstaticarraylist[]a=newarraylist[2];
myObject是一个类。我遇到以下错误:-泛型数组创建(箭头指向new)。不能有泛型类的数组。Java根本不支持它
你应该考虑使用集合而不是数组。比如说,
public static ArrayList<List<MyObject>> a = new ArrayList<List<MyObject>();
如果您试图声明泛型类的arraylist,可以尝试:
public static ArrayList<MyObject> a = new ArrayList<MyObject>();
publicstaticarraylista=newarraylist();
这将为您提供myobject的arraylist(大小为10),或者如果您只需要大小为2的arraylist,则可以执行以下操作:
public static ArrayList<MyObject> a = new ArrayList<MyObject>(2);
publicstaticarraylista=newarraylist(2);
或者您可能正在尝试创建一个arraylist of arraylist:
public static ArrayList<ArrayList<MyObject>> a = new ArrayList<ArrayList<MyObject>>();
publicstaticarraylista=newarraylist();
虽然我不确定我最后说的是否正确…你可以这样做
public static ArrayList<myObject>[] a = (ArrayList<myObject>[])new ArrayList<?>[2];
publicstaticarraylist[]a=(ArrayList[])新的ArrayList[2];
或
publicstaticarraylist[]a=(ArrayList[])新的ArrayList[2];
(前者可能更好)两者都会导致未经检查的警告,您可以通过使用@SuppressWarnings(“unchecked”)忽略或抑制这些警告。在我看来,您使用了错误类型的括号。无法定义泛型数组的原因是类型擦除 另外,变量“a”的声明是脆弱的,它应该是这样的:
List<myObject>[] a;
List[]a;
如果可以使用接口,请不要使用具体类。创建泛型数组的方法比使用列表更简单 首先,让我们
public static ArrayList<myObject>[] a = new ArrayList[2];
publicstaticarraylist[]a=newarraylist[2];
然后初始化
for(int i = 0; i < a.length; i++) {
a[i] = new ArrayList<myObject>();
}
for(int i=0;i
如果它进行编译,您将能够创建不一致的集合。(数组不是这样工作的,而是依赖于在运行时抛出ArrayStoreException。)我将为您挖掘一个关于它的链接……下面是一篇文章。如果您试图转换文章中的示例,使数组是ArrayList,那么您会在此处得到一个错误:List oa=lsa;//类型不匹配:无法从列表转换到列表
为什么不允许泛型数组执行相同的检查?您可以使用在该方法中失去某些向后兼容性的注释来激活它;对象[]y=x;y[1]=10//装箱字符串z=x[1]`我看不出有什么不同:Integer[]integerArray=newinteger[20];Object[]objectArray=整数数组;objectArray[0]=“你好,世界!”;整数数组[0]。浮点值();此代码编译并在运行时引发此异常:java.lang.ArrayStoreException:java.lang.String为什么?公共静态ArrayList[]a=new ArrayList[10];这不是重复!这个问题是关于“新的E[n]”,而这个问题是“新的泛型[n]”。完全不同!或者,为了避免原始类型,ArrayList[]a=(ArrayList[])新的ArrayList[2]代码>。例如,您可以编写a[0]=newarraylist()代码>并且它可以很好地编译。无论如何,这个问题与数组的内容无关,所以我不认为初始化是相关的。
List<myObject>[] a;
public static ArrayList<myObject>[] a = new ArrayList[2];
for(int i = 0; i < a.length; i++) {
a[i] = new ArrayList<myObject>();
}