我想知道 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/