Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 通用数组创建错误_Java_Arrays_Generics - Fatal编程技术网

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>();
}