2011-02-22 5 views
1

나중에 Block 객체를 저장하는 2 차원 ArrayList이 있습니다. 그러나 그것들은 목록의 색인으로 객체를 가져올 때 객체에 대한 Block 메쏘드를 호출 할 수 없습니다. 저는 여기에 목록을 초기화 코드는 다음과 같습니다ArrayList의 객체가 제네릭을 사용하여 해당 유형을 유지하지 않습니다.

문제는 내가 grid (JPanel과)에 블록을 추가 갈 때 나는 다시 개체를 캐스팅하지 않는 한, 그것은 컴파일하지 않을 것으로 보인다
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)); 
     } 
} 

a Block. 즉, grid.add(col.get(column).get(row)) 은 작동하지 않습니다. 왜 이런 일이 일어날 지 모릅니다.

+0

과 같을 것이다 (Euw, 희귀 한 종류.) 매체 –

+1

희귀, 실제로. – irreputable

답변

8

당신은 방금 ArrayList<ArrayList>list는 항상 객체를 반환합니다 어떤 유형 ArrayList에이기 때문에의이

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

과 같을 것이다 얻을 수있을 때이

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

해야합니다. 당신이 ArrayList<ArrayList<Block>>로있는 경우

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

그게 다야, 고마워! – EscapeNT

관련 문제