如何将对象转发到java.util.Map?

时间:2010-09-07 07:13:36

标签: java object map casting

我在Object类型的代码中有一个对象: Object o

实例的类是Object:o.getClass()给出Object。

现在,它应该是一张地图!我如何将其转换为地图?

我试过了:Map<String, Object> map = (HashMap<String,Object>)o

但是这会返回:   java.lang.ClassCastException:[Ljava.lang.Object;无法转换为java.util.HashMap

实例“o”来自XMLRPC请求。此请求不能正确地限定变量

请看看这个!?

修改

现在我有以下问题: o.getClass().getName()代表java.util.ArrayList

o.get(0)提供[Ljava.lang.Object;@739e8329

o.get(0).getClass().getName()给出了java.lang.String

我无法知道该怎么做..

EDIT2:

最后我发现了发生了什么。创建此对象的软件将数据结构展平为String(valueOf())。所以,当我打印变量时,它返回了一个[Ljava.util.Object,它实际上是一个包含这些信息的String。

谢谢你们!

4 个答案:

答案 0 :(得分:8)

[Ljava.lang.Object表示对象的类型o是一个对象数组 - 即Object[]。您无法将其投射到Map

如果查看以下内容,您可能会觉得有用:java: what is this: [Ljava.lang.Object;?

您说.getClass()表示Object,但它是Object还是[LObject? 比较:

    Object[] array= new Object[]{};
    Object simple = new Object();

    System.out.println(array.getClass());
    System.out.println(simple.getClass());      

打印:

class [Ljava.lang.Object;
class java.lang.Object

答案 1 :(得分:7)

错误清楚地表明,o未实现Map接口。因此无法将此对象转换为Map

结果是一个对象数组。也许,阵列实际上拥有地图。试试这是否有效:

 Object[] objects = (Object[]) o;
 if (objects != null && objects.length > 0) {
    Object object = objects[0];
    if (object instanceof Map) {
      Map map = (Map) object;
      System.out.println("Heureka!");
    }
 }

答案 2 :(得分:1)

您无法将o强制转换为Map,因为它未实现Map接口。异常显示oObject的数组。

答案 3 :(得分:1)

ObjectMapper oMapper = new ObjectMapper();
    Map<String, String> map = oMapper.convertValue(YOUROBJECT, Map.class);
    List<InputValues> inputValuesList = new ArrayList<InputValues>();
   for(String key : map.keySet()){
        inputValuesList.add(new InputValues(key,map.get(key).toString()) );
    }


    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.9.9</version>
    </dependency>

InputValues类具有2个字符串。还必须添加Jackson依赖关系。