在另一个问题中,我的代码有equals
方法:
public class Length {
private final double value;
private final Unit unit;
public Length(double value, Unit unit) {
this.value = value;
this.unit = unit;
}
@Override
public boolean equals(Object obj) {
Length length = (Length) obj;
return this.unit.toMM(this.value) == length.unit.toMM(length.value);
}
}
我想比较两个Length
,如果它们可以转换为具有相同长度值的相同单位,则它们彼此相等
@weston在this answer下给了我一些非常好的解释,说明我为什么不在这里使用equals
,但我还不太清楚。
答案 0 :(得分:3)
基本上,他说10mm
和1cm
不应该相等。这是值得商榷的,由你决定。
作为参考,您可以采用类似于BigDecimal
的方法:
new BigDecimal("1.0").equals(new BigDecimal("1.00")) //false
new BigDecimal("1.0").compareTo(new BigDecimal("1.00")) //0
另一个例子是java.time.Period
:
请注意,这意味着一段时间" 15个月"不等于" 1年和3个月"。
或者你也可以决定10毫米和1厘米相等。以java.time.Duration
:
比较基于持续时间的总长度。
最后,重要的是要清楚地记录正在做的事情。