2011-02-22 49 views
1

我有一个二维ArrayList来存储Block对象以供稍后使用。但是,当我通过列表中的索引获取它们时,它不会让我在对象上调用Block方法。这里就是我初始化列表的代码:ArrayList中的对象不保留使用泛型的类型

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)) 将不起作用。任何想法,为什么这可能会发生?

+0

(Euw,少见的类型。) – 2011-02-22 22:22:04

+1

半熟的,其实。 – irreputable 2011-02-22 22:34:28

回答

8

你需要它

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

当你刚刚ArrayList<ArrayList>的得到的是这样的

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); 
+0

就是这样,谢谢! – EscapeNT 2011-02-22 22:07:29