我的代码:
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
任何人都可以帮我解决如何检索对象数据吗?
答案 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中,有两种类型的引用变量转换。
向下转换:如果您有一个引用子类型对象的引用变量,则可以将其指定给子类型的引用变量。您必须进行显式转换才能执行此操作,结果是您可以使用此新引用变量访问子类型的成员。
向上转换:您可以显式或隐式地将引用变量分配给超类型引用变量。这是一种固有的安全操作,因为赋值限制了新变量的访问功能。