如何比较两个MethodHandle实例?如果句柄指向相同的方法,我期望函数返回true。这个类看起来不覆盖equals()或hashcode()。使用相等运算符(==)安全吗?
发布于 2014-10-30 13:32:12
首先,MethodHandle不仅可以封装目标方法,还可以封装行为。例如,您可能有两个方法句柄指向相同的方法,但一个用于封装非虚拟(super. …)调用,另一个表示普通的虚拟调用。这些句柄不可能相等。
除此之外,MethodHandles也没有定义的等式。它们允许调用,但不允许内省。
JVMSpec§5.4.3.5.方法类型与方法处理分辨率
对于实习生方法类型或方法句柄,不需要Java虚拟机的实现。也就是说,对结构相同的方法类型或方法句柄的两个不同的符号引用可能分别不解析为
java.lang.invoke.MethodType或java.lang.invoke.MethodHandle的同一个实例。
但是,从Java 8开始,有一个特性允许对直接的MethodHandle ( Lookup.revealDirect )进行内省。对于此操作成功的句柄,可以使用返回的MethodHandleInfo中的信息来确定两个句柄是否指向同一方法。
https://stackoverflow.com/questions/26647694
复制相似问题