gpt4 book ai didi

java - ZonedDateTime hashCode() 与 isEqual() 一致吗?

转载 作者:行者123 更新时间:2023-12-01 07:21:22 26 4
gpt4 key购买 nike

我想知道 ZonedDateTime.hashCode() 是否执行保证与 ZonedDateTime.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.?, ...);
}
}

正如您在实现中看到的,我正在调用 isEqual我的 equals 实现中的方法,因为当存储的时间指向同一时刻时,我希望两个对象比较相等。我可以在hashCode的实现中添加什么,这样 Foo类满足 hashCode 的要求与 equals 一致?

最佳答案

isEqual() 方法 javadoc 说

This is equivalent to using dateTime1.toInstant().equals(dateTime2.toInstant());.

因此,如果您想计算与此方法一致的哈希码,则必须使用zdt.toInstant().hashCode()。那么您的 Foo.hashCode() 将与您的 Foo.equals() 一致。

关于java - ZonedDateTime hashCode() 与 isEqual() 一致吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36209029/

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