【问题标题】:Objects in ArrayList not retaining their type using genericsArrayList 中的对象不使用泛型保留其类型
【发布时间】:2011-07-02 08:32:06
【问题描述】:

我有一个二维的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)) 不会工作。任何想法为什么会发生这种情况?

【问题讨论】:

    标签: java generics multidimensional-array arraylist


    【解决方案1】:

    你需要它是

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

    当您只有 ArrayList&lt;ArrayList&gt; 时,get 会如下所示

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

    由于list 是一个没有类型的ArrayList,它总是会返回一个Object。

    如果您将其命名为ArrayList&lt;ArrayList&lt;Block&gt;&gt;,它看起来像

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-01
      • 1970-01-01
      • 2021-11-20
      • 2014-12-10
      • 1970-01-01
      • 1970-01-01
      • 2020-01-13
      相关资源
      最近更新 更多