有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我有一个二维的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));
        }
}

问题似乎是,当我将块添加到grid(JPanel)时,除非我将对象转换回Block,否则它不会编译。换句话说,grid.add(col.get(column).get(row)) 不行。知道为什么会这样吗


共 (1) 个答案

  1. # 1 楼答案

    你需要这样

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

    当你只有ArrayList<ArrayList>的时候,get是这样的

    ArrayList<ArrayList> col = new ArrayList<ArrayList>();
    ArrayList list = col.get(i);
    Object obj = list.get(j);
    

    因为list是一个没有类型的ArrayList,所以它总是返回一个对象

    如果你把它设为ArrayList<ArrayList<Block>>,它看起来像

    ArrayList<ArrayList<Block>> col = new ArrayList<ArrayList<Block>>();
    ArrayList<Block> list = col.get(i);
    Block obj = list.get(j);