2013-10-23 32 views
0

所以我有一個奇怪的問題一個HashMap和不知道如何訪問值。我有一個HashMap從API返回給我,假設是HashMap<String, String>。其中一個值實際上是LinkedHashMap。我已經嘗試過投射它,但是因爲它是HashMap<String, String>它給了我一個錯誤,這是不可能的。反正是有得到一個LinkedHashMap值了HashMap<String, String>的?的Java的HashMap <String,字符串>有LinkedHashMap的價值

我已經沒有運氣嘗試這樣做:((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"); 

感謝吉榮送我正確的道路。

+4

你需要提供更多的代碼和你得到的錯誤,否則你的問題不是很清楚。 – vanza

+0

LinkedHashMap是HashMap的子類,爲什麼不直接使用LinkedHashMap作爲HashMap? –

+0

如果您的圖書館正在返回一個沒有泛型的原始HashMap,那麼它可能非常古老而且很難合作。尋找更好的東西。 –

回答

0

支架放置。

嘗試

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

你要投你使用.get()(假設你的嘗試實際上是有效的,它僅僅是一個括號的事情)了。

+0

不工作,抱怨鑄造,因爲這是工作的HashMap的是<字符串,字符串> – Michael

+0

好,我把它一步,這實際上工程...(HashMap)((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

得到返回一個字符串,所以這將無法正常工作。 – Michael

+0

@Michael - 發佈的代碼表明否則。混亂! – OldCurmudgeon

1

轉換類型的地圖類型化地圖,然後檢查每個值的類型:

您可以改爲把它作爲一個MapMap接口由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 
} 
相關問題