如何通过名称调用getter方法?

问题描述 投票:0回答:2

我有以下豆类:

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 methods getter
2个回答
56
投票

如何使用

java.beans.PropertyDescriptor
(假设你的财产有正确的settergetter - 所以在你的情况下你需要更正你的
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 上调用它。


7
投票

另一种简单的方法是使用基本的 java 反射。

Method fieldGetter = A.getClass().getMethod("getField");
String f = fieldGetter.invoke(A).toString();

就这么简单。 干杯!!

© www.soinside.com 2019 - 2024. All rights reserved.