我有一个下面类型的构造对象,
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?
}
}
答案 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属性操作。