在Java中,我们可以写
Foo f = new Foo();
Method method = f.getClass().getDeclaredMethod("say", null); // private void say()
method.setAccessible(true);
method.invoke(f, null);
为什么Java反射API可以访问这样的方法?JVM有什么魔力吗?
这是一些“java安全属性”吗?
我尝试使用 asm.jar 编写对此类方法/字段的字节码 dicty 访问,但失败了。它总是抛出:
Exception in thread "main" java.lang.IllegalAccessError: tried to access field org.nutz.Abc.name from class sun.net.wendal.V$1
at sun.net.wendal.V$1.run(V.java:14)
at java.security.AccessController.doPrivileged(Native Method)
at sun.net.wendal.V.main(V.java:11)
我尝试围绕 AccessController.doPrivileged 调用它,但也失败了。