Доступ к закрытому полю класса с помощью Javassist - PullRequest
0 голосов
/ 23 февраля 2019

Как видно из названия, я пытаюсь получить доступ к частному полю экземпляра включающего класса с помощью 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"
    }
}

1 Ответ

0 голосов
/ 20 марта 2019

Вы пытались использовать m.insertBefore( "System.out.println(outer_field);");

...