2 つの異なるパッケージがあると仮定します... 1 つのパッケージにはアクセスできませんが、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 を取得できない場合、どうすれば値を取得できますか? フィールド gstB をアクセス可能に設定しても、 java.lang.NoSuchMethodException: stackOver.A.getItem(int)を取得します ....