在Java中,我们可以写为什么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调用它,但也失败了。
* JVM的任何魔力?*是的。反射API不可能在“纯”的Java代码中实现。 (您需要来自JVM的支持。) – aioobe