hash_and_equals
如果覆盖了 ==,则始终覆盖 hashCode。
详情
#务必 在覆盖 == 时覆盖 hashCode,并在覆盖 hashCode 时优先覆盖 ==。
Dart 中的每个对象都有一个 hashCode。为了使常见的哈希表实现正常工作,对象的 == 运算符和 hashCode 属性必须保持一致。因此,在覆盖 == 时,也应覆盖 hashCode 以保持一致。同样,如果覆盖了 hashCode,也应覆盖 ==。
错误示例
dart
class Bad {
final int value;
Bad(this.value);
@override
bool operator ==(Object other) => other is Bad && other.value == value;
}正确示例
dart
class Better {
final int value;
Better(this.value);
@override
bool operator ==(Object other) =>
other is Better &&
other.runtimeType == runtimeType &&
other.value == value;
@override
int get hashCode => value.hashCode;
}启用
#要启用 hash_and_equals 规则,请在您的 analysis_options.yaml 文件中将 hash_and_equals 添加到 linter > rules 下方。
analysis_options.yaml
yaml
linter:
rules:
- hash_and_equals如果您改用 YAML map 语法配置 linter 规则,请在 linter > rules 下添加 hash_and_equals: true。
analysis_options.yaml
yaml
linter:
rules:
hash_and_equals: true