我正在进行一些代码的QA测试,并发现开发人员有几个DTO实现了Comparable接口。这个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 等数据结构时从这些对象获得异常行为。欢迎任何想法。谢谢!
DateMidnight
)。现在适当的类型应该是DateTime
,必要时调用withTimeAtStartOfDate
。 - Basil Bourque