0
class A {
    private TypeA a;
    Private TypeB b;
    ...
    Private TypeZ z;

    ...getters/setters...

   public add(Object o) {
       //blablabla
   }

   public testMethod() {
       add(a);
       add(b);
       add(c);
       ......
       add(z);

       /** here instead of calling add(a), add(b), add(c) one by one, I want to use reflection.
       **  something like:
       **  foreach(Field f : getDeclaredFields()) {
       **    add(f.getTheObjectReference());    <-- I made this method "getTheObjectReference" up
       **  }
       **/
   }
}

したがって、この例では、getDeclaredFieldsを使用してすべてのフィールドField [az]を取得できますが、Fieldオブジェクトを取得したら、それを実際のオブジェクト参照に変換するにはどうすればよいですか?「getTheObjectReference」というFieldクラスのメソッドはありません。何か案は?

4

3 に答える 3

4

「現在の」インスタンス(メソッドが呼び出されたインスタンス)のフィールド値を取得しようとしている場合は、ターゲットとしてtestMethod()呼び出したいだけです。Field.getthis

add(f.get(this));
于 2012-10-17T13:35:54.627 に答える
2

使用しようとしていますか

for(Field field : getClass().getDeclaredFields()) {
    Object o = field.get(this);
    add(o);
}
于 2012-10-17T13:36:34.970 に答える
0

Fieldインスタンスは特定のクラスインスタンスメソッドではなく、ジェネリッククラスメソッドを参照しているため、実行しようとしていることは不可能です。

于 2012-10-17T13:36:28.680 に答える