Я нахожусь в том, что хочу переопределить hashcode и == для объекта, и мне интересно, есть ли лучшие методы для реализации хэш-кода, который зависит от нескольких атрибутов, и кажется, что есть некоторые особенности, связанные с Дартом.
Простейшим ответом будет XOR хэши всех атрибутов вместе, и это, вероятно, не так уж плохо. Также есть пример в Dart Up и Running at https://www.dartlang.org/docs/dart-up-and-running/contents/ch03.html
// Override hashCode using strategy from Effective Java, Chapter 11.
int get hashCode {
int result = 17;
result = 37 * result + firstName.hashCode;
result = 37 * result + lastName.hashCode;
return result;
}
но похоже, что он ожидает усечения целочисленной семантики и в Dart, переполняющем диапазон JS-целых чисел, кажется плохой для хэширования.
Мы могли бы это сделать и просто усекать до 32 бит после каждой операции.
Для моего приложения ожидаемый размер набора очень мал и почти ничего не будет, но я удивлен, что не вижу стандартный рецепт для общего случая. Кто-нибудь имеет опыт или сильный опыт в этом?