gpt4 book ai didi

java - 我应该关注这个 compareTo/equals/hashCode 实现吗?

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:51:01 25 4
gpt4 key购买 nike

我正在对一堆代码进行质量检查,发现了几个实例,其中开发人员有一个实现 Comparable 的 DTO。此 DTO 中有 7 或 8 个字段。 compareTo 方法仅在一个字段上实现:

private DateMidnight field1;  //from Joda date/time library

public int compareTo(SomeObject o) {
if (o == null) {
return -1;
}
return field1.compareTo(o.getField1());
}

同样,equals 方法被覆盖,基本上可以归结为:

return field1.equals(o.getField1());

最后hashcode方法的实现是:

return field1.hashCode;

field1 永远不应为 null,并且在这些对象中是唯一的(即,我们不应获得具有相同 field1 的两个对象)。

所以,实现是一致的,这很好,但我应该担心只使用一个字段吗?这是不寻常的吗?它是否可能导致问题或混淆其他开发人员?我正在考虑传递这些对象的列表并且另一个开发人员使用某种 Map 或 Set 并从这些对象获得异常行为的场景。任何想法表示赞赏。谢谢!

最佳答案

我怀疑这是“首次使用获胜”的情况 - 有人需要对这些对象的集合进行排序或将它们放入 HashMap 中,而他们只关心日期。实现它的最简单方法是覆盖 equals/hashCode并实现 Comparable<T>按照你所说的方式。

对于专家排序,更好的方法是实现 Comparator<T>在不同的类中......但不幸的是,Java 没有任何用于相等性测试的等效类。老实说,我认为这是 Java 集合的一个主要弱点。

假设这真的不是“一个自然而明显的比较”,它在设计方面肯定有味道......并且应该非常仔细地记录。

关于java - 我应该关注这个 compareTo/equals/hashCode 实现吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4343506/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com