java声明一个通用数组

时间:2012-10-05 14:23:07

标签: java arrays generics

首先,我是Java的新手,很少有经验。

在课程中,我有以下属性

private List<Arc> arcs[]; // an array of a List of type Arc

在我尝试初始化它的类的构造函数中:

 @SuppressWarnings("unchecked")
 arcs = new List[500];

但它不会编译。我一直在试图弄清楚如何初始化这种类型的数组,我看到了使用我不理解的Array.newinstance。

感谢您的帮助

解决方案:

arcs = new List [500];

4 个答案:

答案 0 :(得分:3)

使用此:

arcs = new List[500];

但不是“Lista”。

我担心你的问题只是一个错字......

答案 1 :(得分:0)

你好像在这里混合。

如果你需要的是一维数组,你可以使用List或数组,但不能同时使用两者:

    List<Arc> list = new ArrayList<Arc>();
    list.add(new Arc());

    Arc[] array = new array[1];
    array[0] = new Arc();

除非你确实需要一个数组列表(2D结构),但似乎并非如此。

修改

根据您的评论,您需要一个列表数组,如下所示:

List<Arc>[] listOfArrays = new List[500]; //you can't easily mix arrays and generics
List<Arc> list = new ArrayList<Arc>();
list.add(new Arc());
listOfArrays[0] = list;

ps:您还可以使用列表列表:

List<List<Arc>> listOfLists = new ArrayList<List<Arc>>();
List<Arc> list = new ArrayList<Arc>();
list.add(new Arc());
listOfLists.add(list);

答案 2 :(得分:0)

理想情况下,为避免出现警告,您需要使用列表清单

List< List<Arc>> arcLists = new ArrayList< List< Arc >>();

当然,在Java 7中,类型推断可能看起来更清晰。

如果你对数组感到害怕,请使用

arcs = (ArrayList<Arc>[]) new ArrayList[500];

答案 3 :(得分:0)

你无法做你想做的事情,因为,数组在运行时包含有关其组件类型的信息。仿制药没有。因此,要创建数组,您必须知道类型,这意味着在这种情况下您不能使用泛型。

这就是代码List<Arcs>[] arcs有效且new ArrayList<Arcs>[500]不有效的原因。

当您尝试执行此类操作时,您将获得相同的错误(T是通用的)

T[] genericArray = new T[];

错误编译器失败,是:Cannot create a generic array

为了避免它,你可以创建这样的东西:

List<Arcs>[] arcs = new ArrayList[500];

但是thsi不是类型安全的,要在代码下面使用类型保存解决方案:

List<List<Arcs>> lista = new ArrayList<List<Arcs>>();