如何按名称调用 getter 方法?

2022-09-02 14:24:40

我有以下豆类:

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
         }
    }

如何获取 由 的特定对象的 getter 返回的值?当然,我可以调用方法,但我不想手动编写前缀。有可能避免这种情况吗?class AMethod.invoke(Object obj, Object... args)"get"


答案 1

如何使用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()

获取应用于读取属性值的方法。

因此,我们可以获得表示 的 getter 的实例。我们现在需要做的就是简单地在bean上调用它,我们想要从中获得结果。java.reflect.Methodfield


答案 2

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

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

就这么简单。干杯!!