2016-02-24 2 views
-3

Как я могу получить эти значения из этого объекта? Я пытался getFields, getDeclaredFields и т. Д., Но все пусто.Получение значений из объекта в java

enter image description here

Проблема заключается в том, что поле [] MyField = o.getClass() getDeclaredFields(). всегда возвращать пустой массив. Я получаю эти значения из базы данных таким образом:

Query reqDisplayResponse = em.createNativeQuery("Select * FROM pxds_displayResponse"); 
List<Object> displayResponseList = reqDisplayResponse.getResultList(); 

И я хочу, чтобы напечатать эти значения:

for(Object o: displayResponseList) { 
    for(Field field: o.getClass().getDeclaredFields()) { 
     log.info(field.getName()); 
    } 
} 

К сожалению log.info недостижимо.

+1

Просьба показать [mcve], который демонстрирует то, что вы пытаетесь сделать, и что не так, а не просто снимок экрана отладчика. –

+0

Ну, я просто пытаюсь напечатать эти 7 значений из Object o. Я понимаю, что вы подразумеваете под примерами, но на самом деле больше нечего показывать, это не вопрос о проблеме с ошибкой, это о том, как что-то делать – user2145530

+1

Ну, если вы попытались getDeclaredFields, и это не сработало, это звучит как проблема , Но мы не можем знать, в чем проблема, если вы не показываете, как вы пытались использовать этот метод. – yshavit

ответ

0

Хорошо, вот решение. На самом деле объект является массивом, getDeclaredFields() возвращает пустую таблицу, в документации мы можем прочитать:

Если этот объект класса представляет собой тип массива, примитивный тип, или пустоту, то этот метод возвращает массив длины 0.

Так что в этой ситуации это бесполезно. Все, что нам нужно сделать, это перебрать этот объект таким образом:

for(Object o: displayResponseList) { 
    for(int i = 0; i < 7; i++) { 
     System.out.println(((Object[])o)[i].toString()); 
    } 
    System.out.println("..............."); 
} 

Надеюсь, что это поможет кому-то в будущем.

1

Вы должны использовать getDeclaredField, а затем использовать на нем get, передавая объект в качестве параметра. Как это:

Field myField = object.getClass().getDeclaredField("_myField"); 
myField.setAccessible(true); 
return (Integer) myField.get(object); 
1

Попытка отобразить объект «о» как массив:

for(int index = 0 ; index < 10 ; index++){ 
    Log.info(String.valueOf(o[index])); 
} 
+0

Невозможно сделать это, потому что o - объект, а не массив: Тип выражение должно быть типом массива, но оно разрешено Object – user2145530

0

Я думаю, что те поля, которые вы пытаетесь получить доступ являются частными

Так что для того, чтобы получить доступ на частных месторождениях вам необходимо: -

for (Field f : object.getClass().getDeclaredFields()) { 
    f.setAccessible(true); 
    Object o; 
    try { 
     o = f.get(object); 
    } catch (Exception e) { 
     o = e; 
    } 
    System.out.println(f.getGenericType() + " " + f.getName() + " = " + o); 
} 
0

Это ID, заданный отладчиком Eclipse, n от Java. Вы не можете получить к нему доступ.
Существует System.identityHashCode(Object), чтобы получить идентификатор объекта. (не тот же ID)
Если вам нужен ID, такой как тот, который показан в отладчике Eclipse, вам придется выделить их самостоятельно.

Вот какое-то общее направление, как вы могли бы сделать что-то подобное:
Elegant way to assign object id in Java

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