我发现自己想要覆盖对象的hashcode和==,我想知道是否有实现依赖于多个属性的hashcode的最佳实践,而且似乎有一些特定于DART的注意事项.
最简单的答案是将所有属性的散列进行XOR运算,这可能并不太糟糕.在DART中也有一个以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位.
对于我的应用程序,集合的预期大小非常小,几乎任何东西都可以,但我很惊讶没有看到一个适用于一般情况的标准配方.有没有人有这方面的经验或强烈的经验?