ArrayList中的对象不使用泛型保留其类型

Esc*_*eNT 1 java generics arraylist multidimensional-array

我有一个二维ArrayList存储Block对象以供以后使用.但是,Block当我通过列表中的索引获取对象时,它不会让我调用对象上的方法.这是我初始化列表的代码:

ArrayList<ArrayList> col = new ArrayList<ArrayList>();

for(int column = 0; column < SIZE; column++) {
        // Add a row of block objects
        col.add(new ArrayList<Block>());

        // Populate the row
        for(int row = 0; row < SIZE; row++) {
            col.get(column).add(new Block());
            grid.add((Block) col.get(column).get(row));
        }
}
Run Code Online (Sandbox Code Playgroud)

问题似乎是当我将块添加到grid(JPanel)时,除非我将对象强制转换为a,否则它将无法编译Block.换句话说,grid.add(col.get(column).get(row)) 不会起作用.任何想法为什么会这样?

Joh*_*int 8

你需要它

ArrayList<ArrayList<Block>> col = new ArrayList<ArrayList<Block>>();
Run Code Online (Sandbox Code Playgroud)

当你刚刚ArrayList<ArrayList>得到的时候会看起来像这样

ArrayList<ArrayList> col = new ArrayList<ArrayList>();
ArrayList list = col.get(i);
Object obj = list.get(j);
Run Code Online (Sandbox Code Playgroud)

由于list是没有类型的ArrayList,它将始终返回一个Object.

如果你有它ArrayList<ArrayList<Block>>看起来像

ArrayList<ArrayList<Block>> col = new ArrayList<ArrayList<Block>>();
ArrayList<Block> list = col.get(i);
Block obj = list.get(j);
Run Code Online (Sandbox Code Playgroud)