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

33,636

Solution 1

[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

Solution 2

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

Solution 3

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.

Solution 4

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

Share:
33,636
user441174
Author by

user441174

Updated on September 05, 2020

Comments

  • user441174
    user441174 over 3 years

    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!