二维数组和泛型问题(Java)

时间:2011-11-25 17:48:11

标签: java generics multidimensional-array arraylist

关于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)方法。但主要区别是什么?在我正在初始化数组的新方法中,这不是“将数组与泛型混合”吗?

1 个答案:

答案 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