2011-02-22 96 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