- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我知道 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/
如何为像 int[]::new 这样的数组构造函数获取 MethodHandle? 这行不通: public static void main(String[] args) throws Throwa
我有一个项目在 Android Studio 或 Gradle 中构建时开始抛出此错误: com.android.tools.r8.ApiLevelException: MethodHandle.in
我正在尝试在我的 Android 应用程序中使用 SOAP 服务。我正在尝试关注 this guide .当我尝试运行我的应用时出现错误: Error: MethodHandle.invoke and
我正在 Android 中开发一个应用程序,我想在其中使用热敏打印机打印收据上的图像。 为了完成此任务,我在我的应用程序中添加了 escpos-coffee 包。 打印正在使用的图像导入java.im
我正在开发 android 原生应用程序,我已经为他们准备好了 图书馆项目包含这些应用程序的所有常用工具。 我正在使用 jfrog artifactory 导入我的库,并且运行良好;现在我想使用 gi
我有一个应用程序,当我将 android studio 更新到 3.4.2 版本并更新 gradle 时,我不得不强制更改一些库,例如 androidx 用于 appcompatibility 和注释
我正在开发一个 Android 应用程序(在我很新的 Android Studio 中),其中包含许多导入的外部 .jar的,模拟器中的开发很顺利,但是当我开始构建APK时,我得到了以下错误: FAI
实现 'org.apache.poi:poi:5.0.0' 当我使用 Run 'app' 在模拟器/手机上运行时,上述依赖项工作正常,但是 当我尝试构建 apk 时,出现以下错误。 com.andro
java.lang.invoke.MethodHandle 和 friend 允许通过一系列 combinators 生成适合 JIT 的运行时代码. 如何在 MethodHandles 中创建局部变
我正在努力思考如何有效地使用 MethodHandles,让我失望的一件事是尝试在调试期间执行 MethodHandles。这是一些示例代码,说明了我的问题。 public class Metric
是否可以将方法引用(例如 SomeClass::someMethod)转换为 MethodHandle 实例?我想要编译时检查的好处(确保类和方法存在)以及使用 MethodHandle API 来检
我正在尝试用 MethodHandle 替换反射调用,但可变参数似乎无法处理。 我的反射调用器目前看起来像这样: public class Invoker { private final Me
我正在研究 JDK 1.7 的新功能,但我无法理解 MethodHandle 的设计用途?我理解(直接)调用静态方法(以及在这种情况下直接使用核心反射 API)。我也理解(直接)调用虚拟方法(非静态,
假设我在给定类型(类/接口(interface))中有三个方法: public void foo(Integer integer); public void foo(Number number); p
鉴于此代码: MethodType mt = MethodType.methodType(void.class, DomainObject.class); NOOP_METHOD = RULE_MET
使用 Java 1.8.0_92,尝试运行 MethodHandles 的示例。 filterArguments() ,抛出以下异常: Exception in thread "main" java.
import java.lang.invoke.*; public class InvokeDynamicDemo { public static double doub
我有一个 Java 7 代码,我正在使用 MethodHanlde .代码是: import java.lang.invoke.MethodHandle; import java.lang.invok
我对方法句柄的方法参数感到困惑。我首先构建了一个guardwithtest方法句柄,如下所示: public class App { public static void trueTarget
MethodHandles.Lookup.defineClass在运行时从字节数组生成一个新类。 返回类在什么情况下可以被垃圾回收?它是否在与 Lookup 对象关联的类加载器的生命周期内保留,或者如
我是一名优秀的程序员,十分优秀!