我想创建一个ArrayList<String>
的数组。我尝试了以下方法:
static ArrayList<String>[] displayBlocks = new ArrayList<String>[3];
但是,我收到编译时错误:
通用数组创建
我添加了import java.util.*;
。我怎样才能编译它?
答案 0 :(得分:10)
如果你想要一个arraylist数组:
import java.util.ArrayList;
import java.util.List;
public class Foo{
List [] arrayOfLists = new ArrayList[10];
}
这是一个相关的post。你不能创建一个通用的arraylist数组。 你可以这样做:
import java.util.ArrayList;
import java.util.List;
public class Foo{
ArrayList<ArrayList<String>> ll = new ArrayList<ArrayList<String>>();
}
答案 1 :(得分:5)
在Java中确实不允许使用此构造。你可以使用varargs hack:
static List<String>[] displayBlocks = createArray(3);
与
public static <E> E[] createArray(int length, E... elements) {
return Arrays.copyOf(elements, length);
}
毋庸置疑,List<List<String>>
更好,除非你对内存非常紧张,但我想知道为什么你不使用String[][]
。
答案 2 :(得分:2)
另一方面的一方也可以创建这样的列表,这可能会让人感觉更熟悉
static ArrayList<String>[] displayBlocks = (ArrayList<String>[]) new ArrayList[3];
答案 3 :(得分:0)
来自Java Language Specification section on array creation expressions:
如果ClassOrInterfaceType不表示可重新类型(第4.7节),则为编译时错误。 。 。 。上述规则意味着数组创建表达式中的元素类型不能是参数化类型,而不是无界通配符。
像其他人所说的那样,使用ArrayLists的ArrayList,或者使用强制转换(你可能还希望抑制未经检查的转换警告)。
答案 4 :(得分:-1)
你做错了什么:
您尚未创建对象。请记住,在java
中1)所有对象都有构造函数。 2)构造函数是方法。 3)要创建一个对象,必须调用构造函数,因此,您正在调用一个方法!
你的欲望含糊不清。但是阅读这两个答案会很好:
1)您可以创建一个数组列表数组:这是一个包含10个数组列表的数据结构。它本质上是一个二维数组,其中每行的列数是可变的,但只有10行。
这将是一个奇怪的数据结构。例如,它可能代表一个域模型,其中您只有10个人,并且每个人在其DVD集合中都有可变数量的dvds。所以你会有10行,每行都有一个数组列表。
static ArrayList [] displayBlocks = new ArrayList [10];
2)可能你只想要一个简单的数组列表,它是一个项目的线性集合。
要做到这一点,你只需声明:
Collection a = new ArrayList(); //要么 列出a = new ArrayList();
现在......你应该问问自己为什么你可以将变量声明为Collection或List,如果你想真正java的集合工作的话。