Мне интересно, если реализация ZonedDateTime.hashCode()
будет соответствовать ZonedDateTime.isEqual(...)
? Если нет, тогда как можно вычислить такой хэш-код?Is ZonedDateTime hashCode() В соответствии с isEqual()?
EDIT
ВНИМАНИЕ, что этот вопрос о методе isEqual
, а не о equals
. Это не опечатка в моем вопросе.
EDIT # 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
?
У вас есть основания думать иначе? Если это так, оно должно быть надлежащим образом задокументировано. – 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'. Это два разных вопроса. –