简体   繁体   中英

How to upcast an Object to a java.util.Map?

I have an object in my code of the type Object: Object o

The class of the instance is Object: o.getClass() gives Object.

Now, it should be a Map! How can I upcast this to a Map?

I tried: Map<String, Object> map = (HashMap<String,Object>)o

But this returns: java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to java.util.HashMap

The instance 'o' comes from a XMLRPC request. This request does not qualify variables correctly supposedly

Please have a look at this!?

EDIT:

Now I have the following issue: o.getClass().getName() gives java.util.ArrayList ,

o.get(0) gives [Ljava.lang.Object;@739e8329 ,

and o.get(0).getClass().getName() gives java.lang.String .

I cannot findout what to do..

EDIT2:

Finally I found out what happened. The software that created this object flattened a datastructure into a String (valueOf()). So, when I printed the variable it returned a [Ljava.util.Object, which was in fact a String containing this information.

Thanks guys!

[Ljava.lang.Object indicates the type of the object o is an array of Objects - that is Object[] . You cannot cast it to Map .

You might find it useful if took a look at: java: what is this: [Ljava.lang.Object;?

You stated that .getClass() indicated Object , but was it Object or [LObject ? Compare to:

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

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

which prints:

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

The error clearly indicates, that o does not implement the Map interface. So it is impossible to cast this object to Map .

The result is an array of Objects. Maybe, the array actually holds maps. Try if this works:

 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!");
    }
 }

You cannot cast o to Map , because it does not implement Map interface. Exception shows that o is array of Object s.

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 class has 2 Strings.Also Jackson Dependency has to be added.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM