2013-05-24 1 views
0

위해 ArrayList 주조, 나는 다시 ArrayList의를 얻으려고 :가 나는지도에 ArrayList에 저장 한

//init map with data: Map<Integer, ArrayList<MyObject>> 
while(iterator.hasNext()) { 
    Entry entry = iterator.next(); 
    ArrayList value = (ArrayList)entry.getValue(); 
} 
일반의 ArrayList에 entry.getValue()의 캐스팅이 작동하는 것 같다

, 그러나 특정 ArrayList에 캐스팅하려고하면 :

ArrayList<MyObject> value = (ArrayList<MyObject>)entry.getValue(); 

컴파일러에서 오류가 발생합니다. 어떤 종류의 "마지막 컴파일로부터의 경고". 이후 For-Each-Loop로 루프 할 수 있도록 특정 ArrayList로 캐스트 할 수 있습니까? 당신이 캐스팅 할 필요가 없습니다이

Map<Integer, ArrayList<MyObject>> map = new HashMap<Integer, ArrayList<MyObject>>(); 

같은지도를 작성하는 경우

+0

어떻게 그런 말은하지 않습니다? Map을 반복하고 각 루프에 특정 ArrayList 을 가져 오려고합니다. – freakout

+0

지도의 값에 수동으로 액세스하고 있었지만. –

답변

5

는, 따라서 더 경고 없다.

for(Entry<Integer, ArrayList<MyObject>> e : map.entrySet()) { 
    Integer key = e.getKey(); 
    ArrayList<MyObject> value = e.getValue(); 
} 

기본적으로 이러한 종류의 경고를 피하기 위해 제네릭 입문이 수행되었습니다. 제네릭을 사용하여 우리는 데이터 구조에 저장하려는 객체의 "유형"을 정의해야합니다. 따라서 검색하는 동안 Java 컴파일러는 데이터 구조가 반환 할 객체를 정확히 알고 있습니다.

+0

LinkedHashMap이고 캐스팅하지 않을 때 호환되지 않는 유형이 있습니다. – freakout

+1

@freakout [프로그램이 인터페이스가 아닌 구현 지향] (http://stackoverflow.com/q/383947/1065197). 그렇게하면 캐스팅 문제가 발생하지 않습니다. –

+0

작동 중! 문제는 내 while 루프가 데이터를 반복하는 것으로 보입니다. for 루프가 완벽하게 작동합니다. 감사합니다! – freakout

0
ArrayList<MyObject> value = e.getValue(); 

가 확인을해야, 당신이 바로 그 유형을 정의하기 때문에 캐스팅 할 필요가 :

Map<Integer, ArrayList<MyObject>>