使用反射方法的字段间接性



给定:

public class A {
   public int n;
   public int func(Object arg) {...}
   ...
}
public class B {
    private A myA;
    ...
}
private B myB;

当在myB上使用反射时,我得到了myA的域;如何使用它访问class A的成员和方法?例如,假设我得到一个字符串"myA.n",给定对象myB,我需要访问myA.n

Class<?> c = B.class; // or myB.getClass()
Field f = c.getField("myA");
int p = ???????? // reflection for int p = myA.n;
int q = ???????? // reflection for int q = myA.func(new Integer(3));

您需要调用Class.getField()并在它们之间进行迭代,以查找正确的函数。

For (Field field : class.getField()) {
  if (field.getName().equals("...")) {
    ...
  }
}

原因是可能有多个字段具有相同的名称和不同的参数类型(即字段名称重载(。

getField()返回类中的公共字段,包括超类中的字段。

相关内容

  • 没有找到相关文章

最新更新