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

你的第二个和第三个项目符号(使用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);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值