在另一問題,我的代碼有這樣的equals
方法:不同單位的長度比較使用「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
S,它們彼此相等,如果它們可以被轉換爲相同的單元具有相同的長度值
@weston在this answer給我提供了一些非常好的解釋,爲什麼我不應該在這裏使用equals
,但我還是不太清楚。
這還不清楚。我沒有在鏈接的答案中讀過,你不應該重寫'equals'。 – Tunaki
這似乎主要是一個意見。在'equals()'中引用其他類型/值是不常見的,但如果這就是你的對象如何定義相等性,那麼它就是如何定義相等性的。檢查「值」本身是否相等,「單位」是「相等」(但是該類型定義相等)可能更直接。 – David
查看第二段,「如果你想要這樣的行爲,給它一個名字(建議isSameLength)'這是平等的,而不是等價的' – Freewind