gpt4 book ai didi

java - 结合 MethodHandles.publicLookup() 与 Method.setAccessible(true)

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:12:23 25 4
gpt4 key购买 nike

我知道 publicLookup() 比公共(public)方法的 lookup() 更快,我想利用它。如果我要在 Method 上使用 MethodHandles.publicLookup().unreflect(Method) 本质上不是公开的,但我调用了 setAccessible(true) on,它会工作吗?

最佳答案

由于每个人都可以调用成功调用setAccessible(true)Method,因此可以使用MethodHandles.publicLookup() 使其不被反射 与任何其他 Lookup 对象一样。

毕竟,这是通过 MethodHandle 使用访问覆盖的唯一方法,因为 java.lang.invoke 本身不提供任何访问覆盖功能。

以下演示使用 Field 而不是 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");

关于java - 结合 MethodHandles.publicLookup() 与 Method.setAccessible(true),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25937872/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com