Java中Date与子类DateT的equals比较适配问题求助
解决方案
问题的核心在于instanceof会允许子类实例匹配父类类型,导致父类对象和子类对象仅比较父类属性时返回true。要解决这个问题,需要确保equals方法仅在两个对象实际类型完全一致时才继续比较属性,具体修改如下:
- 先处理
other为null的情况,避免空指针异常 - 新增类型一致性检查:通过
getClass()方法判断两个对象的实际运行时类是否相同,不同则直接返回false - 类型一致后再强转对象并比较属性值
修改后的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
相关产品推荐
相关产品推荐

