Как видно из названия, я пытаюсь получить доступ к частному полю экземпляра включающего класса с помощью Javassist.За этим нет абсолютно никакой цели, мне просто интересно, возможно ли это и как?
public class Outer {
private String outer_field = "hello";
public void test() {
new Inner().innertest();
}
private class Inner {
void innertest() {}
}
}
И класс Main
для тестирования.
public class Main {
public static void main(String[] args) throws Exception {
ClassPool cp = ClassPool.getDefault();
CtClass inner = cp.get("Outer$Inner");
for (CtMethod m : inner.getDeclaredMethods()) {
if (m.getName().equals("innertest")) {
m.insertBefore("System.out.println(this$0.outer_field);"); // how?
}
}
inner.writeFile();
inner.toClass();
new Outer().test(); // Hoping to print "hello"
}
}