关于2D数组(包含ArrayList的ArrayList)和泛型,我遇到了解一些编译器错误的问题。我对泛型的理解并不是最好的,所以我试图事先研究这个问题,但最后仍然感到困惑。
根据对2D dynamic array using ArrayList in Java的评论,您不能将数组与泛型混合(或者更确切地说,您可以使用@SuppressWarnings(“未经检查”),但不鼓励这样做)。但是,我不确定这究竟意味着什么。
这是我的问题代码:
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)方法。但主要区别是什么?在我正在初始化数组的新方法中,这不是“将数组与泛型混合”吗?
答案 0 :(得分:1)
获取RETURNS给定索引处的对象,它不能用于设置对象。
以下是你可以做的事情:
list l = new list();
item a;
l.add(a);
item b = l.get(0);
b.property = 10;
l.get(0).property == 10; //true, a is the same object as b
b = new item();
l.get(0) == b; //false, list[0] is still a, b is now pointing to a different object
l.get(0) = b; //error, you can't assign to list.get