我有以下豆类:
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"
前缀。有没有可能避免这种情况?
java.beans.PropertyDescriptor
(假设你的财产有正确的setter和getter - 所以在你的情况下你需要更正你的private String setField(String field)
setter因为(a)它的返回类型应该是void
而不是 String
, (b) 应该是 public
而不是 private
).
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
吸气剂的field
实例。我们现在需要做的就是简单地在我们想要从中获得结果的 bean 上调用它。
另一种简单的方法是使用基本的 java 反射。
Method fieldGetter = A.getClass().getMethod("getField");
String f = fieldGetter.invoke(A).toString();
就这么简单。 干杯!!