gpt4 book ai didi

java - 使用 `equals` 进行不同单位的长度比较是不是不好?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:40:41 25 4
gpt4 key购买 nike

另外一个问题,我的代码中有这样一个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,但我还是不太清楚。

最佳答案

本质上,他是说 10mm1cm 不应该相等。这是有争议的,由您决定。

作为引用,您可以采用类似于 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.

最后,重要的是清楚地记录正在做的事情。

关于java - 使用 `equals` 进行不同单位的长度比较是不是不好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34046187/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com