给定:
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()
返回类中的公共字段,包括超类中的字段。