使用Javassist访问封闭的类私有字段

问题描述 投票:0回答:1

正如标题所说,我正在尝试使用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"
    }
}
java javassist
1个回答
0
投票

你尝试过使用m.insertBefore( "System.out.println(outer_field);");吗?

© www.soinside.com 2019 - 2024. All rights reserved.