内容

hash_and_equals

如果重写了 ==,则始终重写 hashCode

此规则从 Dart 2.0 开始可用。

规则集:核心推荐Flutter

此规则提供了一个 快速修复

详情

#

在重写 == 时重写 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 文件中的 linter > rules 下添加 hash_and_equals

analysis_options.yaml
yaml
linter:
  rules:
    - hash_and_equals