Java反射 - 获取现有对象中的当前字段值

时间:2016-11-25 16:50:43

标签: 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?
   }
}

2 个答案:

答案 0 :(得分: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 :(得分:2)

在这种情况下,我是使用外部库的主要支持者。 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属性操作。