2014-09-05 2 views
0

Я хотел бы получить все поля объекта, который уже создан. Оттуда я хотел бы получить имя поля и значение поля и добавить его в строкуВыполнение java-отражения от объектов, созданных на основе объектов

public static void main(String[] args) { 

TestObject obj = new TestObject(); 
obj.setName("Toothbrush"); 
obj.setType("Toiletries"); 
String result = generateQuery(obj); 
} 

public static String generateQuery(TestObject obj){ 
    String result; 
    Field[] lists = obj.getClass().getFields(); 
    for(Field i : lists){ 
     try { 
     result += i.getName(); 
     result += i.get(obj); 
     } catch (IllegalArgumentException e) { 
      e.printStackTrace(); 
     } catch (IllegalAccessException e) { 
      e.printStackTrace(); 
     } 
    } 
    return result; 
} 

public class TestObject(){ 
private String name; 
private String type; 

// getters and setters 
} 

теперь моя переменная списки пуст. Я проверил различные java-размышления, и все они создают экземпляр нового объекта перед выполнением отражения. в моем случае я хотел бы создать экземпляр объекта и установить определенные переменные, а затем выполнить отражение. будет просить о помощи на этом спасибо

+0

Ваш код даже не компилируется. – dasblinkenlight

+0

Я переименовал все переменные и сделал некоторые ошибки ... извините! – deedeeck28

ответ

5

Ваши поля являются частными - что это хорошая вещь, но это не очень хорошо играть с Class.getFields (курсив мой):

Возвращает массив, содержащий объекты Field отражающими все доступные общедоступные поля класса или интерфейса, представленные этим объектом класса.

Вы должны использовать вместо Class.getDeclaredFields:

Возвращает массив объектов поля, отражающие все поля, объявленные в классе или интерфейсе, представленного этим объектом класса. Это включает открытый, защищенный, доступ по умолчанию (пакетный) и частные поля, но исключает унаследованные поля.

Для того, чтобы получить доступ к значениям, вам нужно позвонить field.setAccessible(true) перед тем field.get(obj).

+0

ahhh .. спасибо, что поймали эту ошибку там ... это работает! Спасибо! – deedeeck28

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