使用 `equals` 来比较不同单位的长度是不是很糟糕?
Is it bad to use `equals` for length comparison for different units?
另外一个问题,我的代码有这么一个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
,但我还是不太清楚。
本质上,他是说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
:
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.
最后,重要的是清楚地记录正在做的事情。
另外一个问题,我的代码有这么一个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
,但我还是不太清楚。
本质上,他是说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
:
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.
最后,重要的是清楚地记录正在做的事情。