我想知道ZonedDateTime.hashCode()
的執行是否保證與ZonedDateTime.isEqual(...)
一致?如果不是,那麼如何計算這樣的散列碼呢?ZonedDateTime hashCode()與isEqual()一致嗎?
編輯
注意,這個問題是關於方法isEqual
,不是equals
。這不是我的問題中的印刷錯誤。
編輯#2
我問這個的原因是因爲我有一個包含ZonedDateTime
對象的類。這個類的實現如下:
public class Foo {
private ZonedDateTime dateTime;
@Override
public boolean equals(Object obj) {
// Boilerplate stuff here...
final Foo other = (Foo)obj;
return (... && dateTime.isEqual(other.dateTime) && ...);
}
@Override
public int hashCode() {
// What do I need to put here so that my implementation of
// hashCode is consistent with my implementation of equals?
return Objects.hashCode(..., dateTime.?, ...);
}
}
正如你可以,我打電話給我的執行equals
內isEqual
方法,因爲我想兩個對象當存儲的時間指向比較平等的實現中看到的同一時刻。我可以在執行hashCode
時做些什麼,以使Foo
類符合hashCode
與equals
一致的要求?
你有什麼理由不這樣想嗎?如果是這種情況,應該適當記錄。 – Tunaki
你真的需要解釋你爲什麼認爲這可能是這種情況。否則,這個問題很可能成爲StackOverflow的焦點。 –
@fge不,語言規範只保證'hashCode'方法與'equals'一致。我詢問它是否符合另一種稱爲['isEqual']的方法(https://docs.oracle.com/javase/8/docs/api/java/time/chrono/ChronoZonedDateTime.html#isEqual-java .time.chrono.ChronoZonedDateTime-),它產生了一個不同的結果'equals'。他們是兩個不同的問題。 –