如何使用反射在方法中传递类字段

时间:2012-10-17 13:34:06

标签: java reflection

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 [a-z],但是一旦我有了Field对象,我该如何将它转换为实际的对象引用? Field类中没有名为“getTheObjectReference”的方法。有什么想法吗?

3 个答案:

答案 0 :(得分:4)

如果您尝试获取“当前”实例的字段值(调用了testMethod()方法的实例),您只想使用this来调用Field.get作为目标:

add(f.get(this));

答案 1 :(得分:2)

您是否尝试使用

for(Field field : getClass().getDeclaredFields()) {
    Object o = field.get(this);
    add(o);
}

答案 2 :(得分:0)

您尝试做的事情是不可能的,因为Field实例引用了泛型类方法,而不是特定的类实例方法!