java-在不同单位的长度比较中使用“等于”是否不好?

在另一个问题中,我的代码具有以下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.

最后,重要的是清楚地记录正在执行的操作.

上一篇:在C#中有一个Java等效于空合并运算符(??)吗?


下一篇:PHP相当于JavaScript绑定