当前位置:   article > 正文

Java反射解决方法重载_用于调用重载方法的Java反射Area.equals(Area)

java反射方法有重载

你的第二个和第三个项目符号(使用X.equals(Object)或回退到Object.equals(Object))不需要任何努力,因为无论如何在调用可覆盖的方法Object.equals(Object)时会发生什么,它将使用它能找到的最具体的重写方法.

因此,唯一剩下的任务是调用X.equals(X)方法(如果适用).要最小化相关成本,您可以缓存结果.从Java 7开始,有一个类ClassValue允许将信息与类相关联,以线程安全,懒惰评估和高效查找方式,仍然支持密钥类的垃圾收集(如果需要).

因此,Java 7解决方案可能如下所示:

import java.lang.invoke.*;

public final class EqualsOperation extends ClassValue {

public static boolean equals(Object o, Object p) {

if(o == p) return true;

if(o == null || p == null) return false;

Class> t1 = o.getClass(), t2 = p.getClass();

if(t1 != t2) t1 = commonClass(t1, t2);

try {

return (boolean)OPS.get(t1).invokeExact(o, p);

} catch(RuntimeException | Error unchecked) {

throw unchecked;

} catch(Throwable ex) {

throw new IllegalStateException(ex);

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/306601
推荐阅读
相关标签
  

闽ICP备14008679号