在另一个问题中,我的代码具有以下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);
}
}
我想比较两个长度,如果它们可以转换为具有相同长度值的相同单位,则它们彼此相等
@weston在this answer下为我提供了一些很好的解释,说明为什么我不应该在此处使用equals,但我仍然不太清楚.
解决方法:
本质上,他说10mm和1cm不应该相等.这值得商and,由您决定.
作为参考,您可以采用与BigDecimal相似的方法:
new BigDecimal("1.0").equals(new BigDecimal("1.00")) //false
new BigDecimal("1.0").compareTo(new BigDecimal("1.00")) //0
另一个示例是java.time.Period
:
Note that this means that a period of “15 Months” is not equal to a period of “1 Year and 3 Months”.
或者您也可以确定10毫米和1厘米相等.以java.time.Duration
为例:
The comparison is based on the total length of the durations.
最后,重要的是清楚地记录正在执行的操作.