我需要制作一个对象的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();
提前致谢
答案 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企业一样;)