声明某个对象的ArrayLists数组

时间:2012-02-11 16:16:49

标签: java arraylist

我需要制作一个对象的arraylists数组。

我尝试了两种方法,但我无法从数组元素中访问对象的属性。

我试过了:

     ArrayList<Word>[] SubList = (ArrayList<Word>[])new ArrayList(MainList.size()); 

AND:

    ArrayList<Word>[] SubList= new ArrayList[MainList.size()];

           ArrayList<Word>[] SubList= (ArrayList<Word> [])new ArrayList[MainList.size()];

我想做的是从数组中的对象调用一个方法

像这样:

    SubList[0].get(0).method();

提前致谢

3 个答案:

答案 0 :(得分:4)

为避免使用低级别数组并保留类型安全性,您可以列出列表

List<List<Word>> listOfList = 
         new ArrayList<List<Word>>(new ArrayList<List<Word>>());

然后您可以访问

Word word = listOfList.get(0).get(0);

答案 1 :(得分:1)

通常你不能这样做,因为它不是类型安全的。

请参阅Angelika Langer's Gererics FAQ有关该问题(以及一些additional notes here)。

然而,您可以做的是编写代码,而不是每次都使用泛型和类型转换。你会得到很多警告,但请注意你确实在危险的水域航行。

答案 2 :(得分:0)

Java不支持非常好的泛型数组。但是,如果您坚持将顶级结构作为Array类型对象,则可以通过创建扩展泛型的新类来解决此限制:

import java.util.ArrayList;

class Test {
    private static class StringArrayList extends ArrayList<String> {}

    public static void main(String[] args) {
        StringArrayList[] sublist = new StringArrayList[1];
        int stringLength;

        sublist[0] = new StringArrayList();
        sublist[0].add("Hello");

        stringLength = sublist[0].get(0).length();
        System.out.println(stringLength);
    }
}

它不漂亮,但它有效。这对于个人项目来说很好,但可能有点过于混乱和C ++ - 就像大型Java企业一样;)