【发布时间】:2012-01-06 13:00:31
【问题描述】:
我在理解一些关于 2D 数组(包含 ArrayList 的 ArrayList)和泛型的编译器错误时遇到问题。我对泛型的理解不是最好的,所以我试图事先研究这个问题,结果还是一头雾水。
根据2D dynamic array using ArrayList in Java 上的 cmets,您不能将数组与泛型混合使用(或者更确切地说,您可以使用 @SuppressWarnings("unchecked"),但不鼓励这样做)。但是,我不确定这到底是什么意思。
这是我的问题代码:
blocks = new ArrayList<ArrayList<BarrierBlock>>(columns); // initialize rows
for (int i = 0; i < columns; i++){
// blocks.get(i) = new ArrayList<BarrierBlock>(rows); <- ERROR = (unexpected type; required: variable, found: value)
blocks.add(new ArrayList<BarrierBlock>(rows)); // initialize columns
}
// initilize each block
for (int i = 0; i < blocks.size(); i++){
for (int j = 0; i < blocks.get(i).size(); j++){
int[] blockLoc = {location[0] + (i*BLOCK_SIDE_LENGTH), location[1] + (j*BLOCK_SIDE_LENGTH)};
// blocks.get(i).get(j) = new BarrierBlock(BLOCK_SIDE_LENGTH, blockLoc); <- ERROR = (unexpected type; required: variable, found: value)
blocks.get(i).add( new BarrierBlock(BLOCK_SIDE_LENGTH, blockLoc)); // initialize 2D array elements
}
}
我注释掉的两行是我初始化数组的最初尝试。当我尝试这个时编译器抱怨并给了我列出的错误。这个错误是什么意思?我会认为声明语句的双方都是变量。
看了一圈,发现我应该使用ArrayList的add(E e)方法。但主要区别是什么?在我初始化数组的新方式中,那不是也“将数组与泛型混合”吗?
【问题讨论】:
标签: java generics multidimensional-array arraylist