Есть ли способ получить значение определенного поля в объекте по имени поля? - PullRequest
1 голос
/ 28 июля 2011

Короче говоря, я хочу сделать что-то вроде

MyObject myObject;

public String getField (String fieldName) {
return myObject.fieldName; // how could I do this since fieldName is a String?
}

Справочная информация:

Я получаю данные из базы данных, используя хранимую процедуру.

Хранимая процедурав основном получает все столбцы.Но я хочу, чтобы пользователь выбрал столбец для отображения в таблице.

В объекте Hibernate у меня есть все поля, соответствующие результирующему набору, возвращенному хранимой процедурой.

Со списком полей (строк), которые хочет пользователь, есть ли способ отобразить значение соответствующего поля в объекте Hibernate с заданным именем поля?

Ответы [ 3 ]

4 голосов
/ 28 июля 2011

Вы можете получить к нему доступ, используя отражение:

public static Object getField(Object target, String fieldName) throws Exception {
    return target.getClass().getDeclaredField(fieldName).get(target);
}

В вашем случае вы просто используете:

myObject.getClass().getDeclaredField(fieldName).get(myObject);

Вот небольшой тест кода:

static class A {
    int x = 1;
}

public static void main(String[] args) throws Exception {
    System.out.println(getField(new A(), "x"));
}

Выход:

1
0 голосов
/ 28 июля 2011

IMO для спящего режима, лучше получить доступ к значению через методы доступа (getter).

Я всегда использую Apache BeanUtils для этого (http://commons.apache.org/beanutils/v1.8.3/apidocs/index.html)

org.apache.commons.beanutils.BeanUtils.getSimpleProperty(yourEntity,fieldName);

Или, если вы хотите использовать поле, чем использовать Reflection:

//get the field
java.lang.reflect.Field field = yourEntity.getClass().getField(fieldName);
//set it accessible
boolean oldAccessible = field.isAccessible();
try{
    field.setAccessible(true);
    Object value = field.get(yourEntity);
    return value == null ? "" : value.toString();
}finally{
    field.setAccessible(oldAccessible)
};
0 голосов
/ 28 июля 2011

Использование Отражение

public String getField (String fieldName, Class clazz ,  Object o) {
      Field name = clazz.getField("name");
      name.get(o);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...