publicLookup()
これは for public メソッドよりも高速であることを理解しておりlookup()
、それを利用したいと考えています。本質的に公開されていないが、私が呼び出したもので使用する場合MethodHandles.publicLookup().unreflect(Method)
、それは機能しますか?Method
setAccessible(true)
1 に答える
5
呼び出しに成功したMethod
onsetAccessible(true)
は誰でも呼び出すことができるため、MethodHandles.publicLookup()
他のLookup
オブジェクトと同様に the like を使用して反映されないようにすることができます。
結局のところ、それ自体ではアクセス オーバーライド機能を提供しないため、 MethodHandle
s でアクセス オーバーライドを使用する唯一の方法です。java.lang.invoke
次のデモでは、aField
ではなく aを使用してMethod
いますが、印象的な結果が得られています。
Field m = String.class.getDeclaredField("value");
m.setAccessible(true);
MethodHandle mh = MethodHandles.publicLookup().unreflectGetter(m);
char[] ch = (char[])mh.invoke("hello");
Arrays.fill(ch, '*');
System.out.println("hello");
于 2014-09-19T17:42:49.883 に答える