2010-09-07 2 views
3

У меня есть объект в мой код типа объекта: Object oКак поднять объект на java.util.Map?

Класс экземпляра является Object: o.getClass() дает объект.

Теперь это должна быть Карта! Как я могу преобразовать это в карту?

Я пробовал: Map<String, Object> map = (HashMap<String,Object>)o

Но это возвращает: java.lang.ClassCastException: [Ljava.lang.Object; не может быть отброшен в java.util.HashMap

Экземпляр «o» исходит из запроса XMLRPC. Этот запрос не квалифицирует переменные правильно, предположительно

Пожалуйста, взгляните на это !?

EDIT:

Теперь у меня есть следующий вопрос: o.getClass().getName() дает java.util.ArrayList,

o.get(0) дает [Ljava.lang.Object;@739e8329,

и o.get(0).getClass().getName() дает java.lang.String.

Я не могу Findout что делать ..

edit2:

Наконец я узнал, что случилось. Программное обеспечение, создавшее этот объект, сгладило структуру данных в String (valueOf()). Итак, когда я напечатал переменную, он возвратил [Ljava.util.Object, который был фактически String, содержащий эту информацию.

Спасибо, ребята!

+0

Возможный дубликат [java: что это: \ [Ljava.lang.Object ;?] (https://stackoverflow.com/questions/3442090/java-what-is-this-ljava-lang-object) –

ответ

7

[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 
+0

+1 но imho вы должны добавить, что приведение объекта к карте в порядке, даже если вы говорите это косвенно. – InsertNickHere

+0

Все, спасибо за вашу ссылку! Это полезно! – user441174

+0

Теперь я делаю следующее: o.getClass(). GetName() -> java.util.ArrayList, а затем o.get (0) -> [Ljava.lang. Object; @ 8sfajb8c или около того, а затем o.get (0) .getClass(). GetName() -> java.lang.String (!!) Как это возможно? – user441174

6

Ошибка ясно указывает, что 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!"); 
    } 
} 
+0

Я прошу отличиться в этой точке, Hashmap наследует java.lang.Ojbect. Карта - это интерфейс, который я понял как отличающийся, но не конкретный вопрос здесь. – ebt

+0

@ebt - это точно проблема. 'o' extends' Object', это точно, но для того, чтобы передать этот экземпляр в «Map», экземпляр должен быть также реализацией «Map». (На самом деле он перешел на «HashMap», который не нужен и ничего не меняет) –

1

Вы не можете бросить o к Map, потому что он не реализует интерфейс Map. Исключение показывает, что o является массивом Object s.

Смежные вопросы