gpt4 book ai didi

java - 将 BoundMethodHandle 转换为反射

转载 作者:行者123 更新时间:2023-11-30 02:02:55 24 4
gpt4 key购买 nike

是否可以检索使用 MethodHandle 引用的成员?

MethodHandle mh = MethodHandles.lookup().findStatic(..., ..., ...);
java.lang.reflect.Method method = convertToReflection(mn); //???

最佳答案

正确的术语是“直接方法句柄”,以强调与类成员有直接连接的事实。或者如the documentation说:

A direct method handle represents a method, constructor, or field without any intervening argument bindings or other transformations.

术语“绑定(bind)”更倾向于表示存在预先绑定(bind)的参数值或绑定(bind)的接收器,它们不再与普通的反射对象匹配。

Java 8 允许通过 MethodHandles.Lookup.revealDirect(…)MethodHandle 获取成员:

public class Tmp {
public static void main(String[] args) throws ReflectiveOperationException {
MethodHandles.Lookup lookup = MethodHandles.lookup();
MethodHandle mh = lookup
.findStatic(Tmp.class, "main", MethodType.methodType(void.class, String[].class));
Method method = lookup.revealDirect(mh).reflectAs(Method.class, lookup);
System.out.println(method);
}
}

它仅限于与您提供的 Lookup 对象描述的上下文兼容的反射对象,即,当尝试通过名称和类型查找同一成员时,该查找对象会成功,它将起作用。

关于java - 将 BoundMethodHandle 转换为反射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52224764/

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