2013-10-23 4 views
0

인 LinkedHashMap이 있습니다. 따라서 HashMap이라는 이상한 문제가 있으며 값에 액세스하는 방법을 모르겠습니다. 나는 HashMap<String, String> 인 API에서 나에게 HashMap을 돌려 보낸다. 값 중 하나는 실제로 LinkedHashMap입니다. 나는 캐스팅을 시도했으나, 이 <String, String>이므로 오류가 발생했습니다. 어쨌든 HashMap 중에서 LinkedHashMap 값이 <String, String>이 될까요?Java HashMap <String, String> 값이

나는 운없이이 시도했다 : ((HashMap)userInfo.get("key")).get("key");

 Could not complete request <java.lang.ClassCastException: 
java.util.LinkedHashMap cannot be cast to java.lang.String>java.lang.ClassCastException: 

java.util.LinkedHashMap은 java.lang.String의

이보고 정말 못생긴 캐스트 할 수없는,하지만 난에 실제로 할 수 있었다 이것을 사용하여 HashMap에서 꺼내십시오.

(HashMap) ((HashMap)((HashMap)userInfo).get("picture")).get("data"); 

올바른 경로로 나를 보내 주신 Jeroen에게 감사드립니다.

+4

더 많은 코드와 오류를 제공해야합니다. 그렇지 않으면 질문이 명확하지 않습니다. – vanza

+0

LinkedHashMap은 HashMap의 서브 클래스이므로 LinkedHashMap을 HashMap으로 사용하지 않는 이유는 무엇입니까? –

+0

라이브러리가 제네릭없이 원시 HashMap을 반환하면 아마도 매우 오래되어 작업하기가 어려울 것입니다. 더 나은 것을 찾으십시오. –

답변

0

대괄호 배치.

당신이 (당신의 시도를 가정하는 것은 실제로 유효하고 괄호의 문제이다) .get()를 사용하기 전에 캐스팅해야

(((HashMap)userInfo).get("key")).get("key"); 

을보십시오.

+0

작동하지 않는 HashMap이 작동하기 때문에 캐스팅에 대해 불평합니다. Michael

+0

좋아요. 한 단계 더 나아갔습니다. 실제로이 기능이 작동합니다 ...(HashMap) ((HashMap) userInfo) .get ("picture")). get ("data"); – Michael

+0

내가 올바른 길로 나를 보내 준 이후로 대답 해 줄게 :) – Michael

0

LinkedHashMap 인 경우 HashMap으로 전송하면 문제가 발생합니다. 지정되지 않은 맵에 처음

Map m = userInfo.get("key"); 
+0

정말요? [LinkedHashMap는 HashMap을 확장합니다.] (http://docs.oracle.com/javase/6/docs/api/java/util/LinkedHashMap.html)! –

+0

get는 String을 반환하므로 작동하지 않습니다. – Michael

+0

@Michael - 게시 된 코드에서 다른 의미입니다. 혼란스러워! – OldCurmudgeon

1

변환 입력 된지도를하고 각 값의 유형을 확인 :

당신은 대신 Map로 취급 할 수있다. Map 인터페이스는 HashMapLinkedHashMap 클래스로 구현되므로 특정 유형 대신 가장 많이 사용하려고합니다.

HashMap<String, String> typedMap = ... 
Map untypedMap = (Map) typedMap; 
Object mapValue = untypedMap.get("key"); 

if(mapValue instanceof Map) { 
    // handle as Map 
} 

if(mapValue instanceof String) { 
    // handle as String 
} 
관련 문제