You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中Date与子类DateT的equals比较适配问题求助

解决方案

问题的核心在于instanceof会允许子类实例匹配父类类型,导致父类对象和子类对象仅比较父类属性时返回true。要解决这个问题,需要确保equals方法仅在两个对象实际类型完全一致时才继续比较属性,具体修改如下:

  1. 先处理other为null的情况,避免空指针异常
  2. 新增类型一致性检查:通过getClass()方法判断两个对象的实际运行时类是否相同,不同则直接返回false
  3. 类型一致后再强转对象并比较属性值

修改后的Date类equals方法代码:

public boolean equals(Object other) {
    if (other == null) {
        return false;
    }
    if (this.getClass() != other.getClass()) {
        return false;
    }
    Date d = (Date) other;
    return day == d.day && month == d.month && year == d.year;
}

方案说明

  • getClass()返回对象的实际运行时类,父类对象的getClass()结果是Date.class,子类对象的是DateT.class,两者不相等时直接返回false,完全符合需求
  • 没有使用Objects类的任何方法,也没有在代码中引用子类DateT的类名,满足所有限制条件
  • 保证了equals方法的对称性:date.equals(dateT)和dateT.equals(date)都会返回false

内容的提问来源于stack exchange,提问作者nelad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 10:57:07