如何比较两个MethodHandle实例?如果句柄指向相同的方法,我期望该函数返回 true。它看起来不像类覆盖equals()或hashcode()。使用相等运算符 ( ==) 安全吗?
首先,MethodHandles不仅可以封装一个目标方法,还可以封装一个行为。例如,您可能有两个指向同一方法的方法句柄,但一个封装非虚拟 ( super. \xe2\x80\xa6) 调用,另一个代表普通虚拟调用。这些句柄\xe2\x80\x99 不能相等。
除此之外,无论如何 s 都没有定义的相等性MethodHandle。它们允许调用,但不允许内省:
JVMSpec \xc2\xa75.4.3.5。方法类型和方法句柄解析:
\n\n\n\n\nJava 虚拟机的实现不需要驻留方法类型或方法句柄。也就是说,对结构相同的方法类型或方法句柄的两个不同的符号引用可能无法分别解析为
\njava.lang.invoke.MethodType或的相同实例java.lang.invoke.MethodHandle。
然而,从 Java\xc2\xa08 开始,有一个功能允许内省直接的 MethodHandle, Lookup.revealDirect. 对于操作成功的句柄,可以根据返回的信息MethodHandleInfo判断两个句柄是否指向同一个方法。
| 归档时间: |
|
| 查看次数: |
195 次 |
| 最近记录: |