假设我们有两个不同的包......一个包无法访问,但我们想知道一个名为 b 的复杂字段的值。
public class A {
private String whatever;
private B b;
private static class B {
final ArrayList<Z> c = new ArrayList<Z>();
private void addItem(Z z) {
this.c.add(z);
}
private Z getItem(int nr) {
return this.c.get(nr);
}
}
}
public class Reflect extends A {
public static void main(String[] args) throws NoSuchFieldException, SecurityException {
Reflect ref = new Reflect();
Class getA = ref.getClass().getSuperclass();
Field getB = getDeclaredField("b");
getB.setAccessible(true);
Class bInst = getB.getClass();
Method bMeth = bInst.getMethod("getItem", Integer.TYPE);
Object zInst = bMeth.invoke(new Integer(123));
}
}
如果我没有从包中获得复杂类型 B,我如何获得价值?仍然得到java.lang.NoSuchMethodException: stackOver.A.getItem(int)即使我设置了字段 gstB 可访问....