2016-11-25 6 views
0

У меня есть сконструированный объект ниже типа,Java Reflection - Получить текущее значение поля в существующем объекте

public class Form { 
    private String a; 
    private String b; 
    private Boolean c; 

    public String getA() { return a; } 
    public void setA (String a) { this.a = a; } 
    public String getB() { return b; } 
    public void setB (String b) { this.b = b; } 
    public Boolean getC() { return c; } 
    public void setC (Boolean c) { this.c = c; } 
} 

Я использую отражение для изучения существующего объекта, например, Эта форма: ("testA", "testB", False)

Как получить текущее значение определенного поля, допустим, String b?

// Assume "form" is my current Form object 
Field[] formFields = form.getClass().getDeclaredFields(); 
if (formFields != null) { 
    for (Field formField : formFields) { 
     Class type = formField.getType(); 
     // how do I get the current value in this current object? 
    } 
} 

ответ

3

Используйте методы java.lang.reflect.Field:

// Necessary to be able to read a private field 
formField.setAccessible(true); 

// Get the value of the field in the form object 
Object fieldValue = formField.get(form); 
1

Это ситуация, в которой я большой сторонник использования внешних библиотек. Apache Commons BeanUtils отлично подходит для этой цели и скрывает множество основных возможностей java.lang.reflect. Вы можете найти его здесь: http://commons.apache.org/proper/commons-beanutils/

Используя BeanUtils код, чтобы удовлетворить ваши потребности будут следующие:

Object valueOfB = PropertyUtils.getProperty(formObject, "b"); 

Еще одно преимущество использования BeanUtils является то, что он делает все из проверки, чтобы убедиться, что у вас есть правильный метод доступа для «b» - getB(). В библиотеке BeanUtils есть и другие методы утилиты, которые позволяют обрабатывать всевозможные манипуляции с свойствами Java bean.

+0

Спасибо, это работает, но возвращает только строку. Мне может понадобиться определенный объект. –

+0

Приношу свои извинения. Я обновил ответ. Я думал, что тебе нужна только строка. Я обновил свой ответ. Если вы используете PropertyUtils (который находится внутри этой библиотеки), у вас будет необработанный объект, возвращенный вам. – mightyrick

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