web-dev-qa-db-ja.com

名前でゲッターメソッドを呼び出す方法

次の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_の特定のオブジェクトのゲッターから返された値を取得するにはどうすればよいですか?もちろん、Method.invoke(Object obj, Object... args)でメソッドを呼び出すことはできますが、_"get"_プレフィックスを手動で記述したくありません。それを回避することは可能ですか?

11
user3663882

_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() など、多くのことを実行できます

プロパティ値の読み取りに使用するメソッドを取得します。

したがって、fieldのゲッターを表す_Java.reflect.Method_のインスタンスを取得できます。あとは、結果を取得したいBeanで呼び出すだけです。

45
Pshemo

別の簡単な方法は、基本的なJavaリフレクションを使用することです。

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

それと同じくらい簡単です。乾杯!!

5
AnirbanDebnath