我发现自己想要覆盖对象的hashcode和==方法,想知道如何实现依赖于多个属性的hashcode的最佳实践,似乎有一些Dart特定的考虑。
最简单的答案是将所有属性的哈希值进行异或运算,这可能并不太糟糕。在Dart Up and Running中也有一个示例,链接为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位。
对于我的应用程序,集合的预期大小非常小,几乎任何方法都可以,但我很惊讶没有看到一般情况下的标准方法。 有谁有任何相关经验或强烈推荐吗?