Недавно я обнаружил метод Objects.hash()
.
Моя первая мысль заключалась в том, что это значительно облегчает реализацию hashCode()
. См. Следующий пример:
@Override
//traditional
public int hashCode() {
int hash = 5;
hash = 67 * hash + (int)(this.id ^ (this.id >>> 32));
hash = 67 * hash + (int)(this.timestamp ^ (this.timestamp >>> 32));
hash = 67 * hash + Objects.hashCode(this.severity);
hash = 67 * hash + Objects.hashCode(this.thread);
hash = 67 * hash + Objects.hashCode(this.classPath);
hash = 67 * hash + Objects.hashCode(this.message);
return hash;
}
@Override
//lazy
public int hashCode() {
return Objects.hash(id, timestamp, severity, thread, classPath, message);
}
Хотя я должен сказать, что это кажется слишком хорошим, чтобы быть правдой. Также я никогда не видел этого использования.
Есть ли недостатки использования Objects.hash()
по сравнению с реализацией собственного хеш-кода? Когда я буду выбирать каждый из этих подходов?
Обновление
Несмотря на то, что эта тема отмечена как разрешенная, не стесняйтесь оставлять ответы на вопросы, которые предоставляют новую информацию и проблемы.