无法将对象强制转换为hashmap

时间:2013-08-20 06:39:03

标签: java hashmap

我的代码:

Object res =  stub.call(sessionId, "sale.list", "11111");
HashMap<String, String> map = (HashMap<String, String>) res;

将对象转换为HashMap我遇到了以下异常,

Exception in thread "main" java.lang.ClassCastException: [Ljava.util.HashMap;   
cannot be cast to java.util.HashMap

任何人都可以帮我解决如何检索对象数据吗?

5 个答案:

答案 0 :(得分:5)

仅当HashMap返回stub.call(sessionId, "sale.list", "11111")个对象时,您才可以将res转换为HashMap

[Ljava.lang.HashMap;表示你得到的是一个hashMap数组,而不是一个HashMap。

答案 1 :(得分:4)

您正在获取一个哈希映射数组,因此转换为数组:

HashMap[] maps = (HashMap[]) res;

答案 2 :(得分:2)

异常消息表明stub.call(...)方法正在返回HashMap[]而不是HashMap

“修复”就是这样做:

  HashMap<String, String>[] maps = (HashMap<String, String>[]) res;

或者如果你知道数组只包含一个元素,那么:

  HashMap<String, String> map = ((HashMap<String, String>[]) res)[0];

不幸的是,这两个都会为您提供有关未经检查的转化的警告。并且避免这种情况的唯一方法是使用通配符/原始类型; e.g。

  HashMap<?, ?> map = ((HashMap<?, ?>[]) res)[0];

答案 3 :(得分:1)

Object res =  stub.call(sessionId, "sale.list", "11111");

现在,如果您知道上面的代码返回一个java.util.Map或至少一个java.util.HashMap,并且它遵循相同的泛型,那么您可以将它转换为Map。或者至少,它应该返回null。

Map<String, String> map = (Map<String, String>) res; 

答案 4 :(得分:0)

如果你想将某些东西转换成其他东西,你可能知道java cast。在Java中,有两种类型的引用变量转换。

向下转换:如果您有一个引用子类型对象的引用变量,则可以将其指定给子类型的引用变量。您必须进行显式转换才能执行此操作,结果是您可以使用此新引用变量访问子类型的成员。

向上转换:您可以显式或隐式地将引用变量分配给超类型引用变量。这是一种固有的安全操作,因为赋值限制了新变量的访问功能。

我引自Java rules for casting