gpt4 book ai didi

java - 如何比较MethodHandle实例?

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

如何比较两个 MethodHandle 实例?如果句柄指向相同的方法,我期望该函数返回 true。该类看起来并没有覆盖 equals()hashcode()。使用相等运算符 (==) 安全吗?

最佳答案

首先,MethodHandle不仅可以封装目标方法,还可以封装行为。例如。您可能有两个指向同一方法的方法句柄,但一个封装了非虚拟(super....)调用,另一个表示普通的虚拟调用。这些句柄不能相等。

除此之外,MethodHandle 无论如何都没有定义的相等性。它们允许调用,但不允许内省(introspection):

JVMSpec §5.4.3.5. Method Type and Method Handle Resolution :

An implementation of the Java Virtual Machine is not required to intern method types or method handles. That is, two distinct symbolic references to method types or method handles which are structurally identical might not resolve to the same instance of java.lang.invoke.MethodType or java.lang.invoke.MethodHandle respectively.

<小时/>

但是,从 Java 8 开始,有一项功能允许内省(introspection)直接 MethodHandleLookup.revealDirect 。对于此操作成功的句柄,您可以使用返回的 MethodHandleInfo 中的信息。找出两个句柄是否指向同一个方法。

关于java - 如何比较MethodHandle实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26647694/

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