Java 无法将对象强制转换为hashmap

Java 无法将对象强制转换为hashmap,java,hashmap,Java,Hashmap,我的代码: Object res = stub.call(sessionId, "sale.list", "11111"); HashMap<String, String> map = (HashMap<String, String>) res; 有人能帮我检索对象数据吗?只有当stub.call(sessionId,“sale.list”,“11111”)返回HashMap对象时,才能将res强制转换为HashMap [Ljava.lang.HashMap;表示您得

我的代码:

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

有人能帮我检索对象数据吗?

只有当
stub.call(sessionId,“sale.list”,“11111”)
返回
HashMap
对象时,才能将res强制转换为
HashMap

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

Object res =  stub.call(sessionId, "sale.list", "11111");
现在,如果您知道上面的代码返回一个java.util.Map或至少一个java.util.HashMap,并且它遵循相同的泛型,那么您可以将其转换为一个Map。或者至少,它应该返回一个null

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

您将获得一个哈希映射数组,因此强制转换为数组:

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

如果您想将某件事转换为另一件事,您可能知道java转换

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

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


我从中引用这一点,异常消息表明
stub.call(…)
方法返回的是
HashMap[]
,而不是
HashMap

“修复”就是这样做的:

  HashMap<String, String>[] maps = (HashMap<String, String>[]) res;
HashMap[]maps=(HashMap[])res;
或者,如果您知道数组将只包含一个元素,则:

  HashMap<String, String> map = ((HashMap<String, String>[]) res)[0];
HashMap=((HashMap[])res[0];
不幸的是,这两种类型都会对未经检查的转换发出警告。避免这种情况的唯一方法是使用通配符/原始类型;例如

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