Javaでは、次のように書くことができます
Foo f = new Foo();
Method method = f.getClass().getDeclaredMethod("say", null); // private void say()
method.setAccessible(true);
method.invoke(f, null);
Java Reflect 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 の周りで呼び出そうとしましたが、失敗しました。