我有以下bean类:
public class A{
private String field;
public String getField() {
return field;
}
private String setField(String field) {
this.field = field;
}
}
以下课程:
public class B{
public static void main(String[] args){
A a = new A();
//do stuff
String f = //get a's field value
}
}
如何获取class A
的特定对象的getter返回的值?当然,我可以使用Method.invoke(Object obj, Object... args)
调用方法,但我不想手动编写"get"
前缀。有可能避免这种情况吗?
答案 0 :(得分:39)
如何使用java.beans.PropertyDescriptor
Object f = new PropertyDescriptor("field", A.class).getReadMethod().invoke(a);
或更长的版本(与前一版完全相同)
PropertyDescriptor pd = new PropertyDescriptor("field", A.class);
Method getter = pd.getReadMethod();
Object f = getter.invoke(a);
PropertyDescriptor
允许我们执行许多操作,例如getReadMethod()
获取应该用于读取属性值的方法。
因此,我们可以获得代表java.reflect.Method
的getter的field
实例。我们现在需要做的只是在我们想要获得结果的bean上调用它。
答案 1 :(得分:4)
另一种简单的方法是使用基本的java反射。
Method fieldGetter = A.getClass().getMethod("getField");
String f = fieldGetter.invoke(A).toString();
就这么简单。 干杯!!