2013-10-23 31 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 
} 
相关问题