2010-09-07 8 views
3

J'ai un objet dans mon code de type objet: Object oComment faire pour passer un objet à un java.util.Map?

La classe de l'instance est l'objet: o.getClass() donne l'objet.

Maintenant, ce devrait être une carte! Comment puis-je transférer ceci à une carte?

J'ai essayé: Map<String, Object> map = (HashMap<String,Object>)o

Mais retourne: java.lang.ClassCastException: [Ljava.lang.Object; ne peut pas être converti en java.util.HashMap

L'instance 'o' provient d'une requête XMLRPC. Cette demande ne qualifie pas les variables correctement supposément

S'il vous plaît jeter un oeil à ça !?

EDIT:

Maintenant, j'ai la question suivante: o.getClass().getName() donne java.util.ArrayList,

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

et o.get(0).getClass().getName() donne java.lang.String.

Je ne peux pas findout quoi faire ..

EDIT2:

Enfin, je trouve ce qui est arrivé. Le logiciel qui a créé cet objet a aplati une infrastructure de données en une chaîne (valueOf()). Ainsi, lorsque j'ai imprimé la variable, elle renvoyait un [Ljava.util.Object, qui était en fait une chaîne contenant cette information.

Merci les gars!

+0

Copie possible de [java: qu'est-ce que ceci: \ [Ljava.lang.Object ;?] (https://stackoverflow.com/questions/3442090/java-what-is-this-ljava-lang-object) –

Répondre

7

[Ljava.lang.Object indique le type de l'objet o est un tableau d'objets - c'est Object[]. Vous ne pouvez pas le diffuser au Map.

Vous trouverez peut-être utile si a un oeil à: java: what is this: [Ljava.lang.Object;?

Vous avez dit que .getClass() a indiqué Object, mais était-ce Object ou [LObject? Comparer à:

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

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

qui imprime:

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

+1 mais à mon humble avis, vous devriez ajouter que lancer Object to Map est bien, même si vous le dites indirectement. – InsertNickHere

+0

Très bien, merci pour votre lien! C'est utile! – user441174

+0

Je suis maintenant un peu plus loin: Je fais ce qui suit: o.getClass(). GetName() -> java.util.ArrayList, puis o.get (0) -> [Ljava.lang. Object; @ 8sfajb8c ou plus, puis o.get (0) .getClass(). GetName() -> java.lang.String (!!) Comment est-ce possible? – user441174

6

L'erreur indique clairement que o n'implémente pas l'interface Map. Il est donc impossible de lancer cet objet à Map.

Le résultat est un tableau d'objets. Peut-être que le tableau contient des cartes. Essayez si cela fonctionne:

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

Je ne suis pas d'accord sur ce point, Hashmap hérite de java.lang.Ojbect. La carte est une interface, que j'ai compris être différente mais pas la question particulière ici. – ebt

+0

@ebt - c'est exactement le problème. 'o' étend' Object', c'est sûr, mais pour pouvoir lancer cette instance dans 'Map', l'instance doit aussi être une implémentation de' Map'. (En fait, il lance 'HashMap' qui n'est pas nécessaire et ne change rien) –

1

Vous ne pouvez pas lancer o-Map, car il ne met pas en oeuvre l'interface Map. Exception montre que o est un tableau de Object s.

Questions connexes