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 ファイルの linter > rules の下に hash_and_equals を追加してください。
analysis_options.yaml
yaml
linter:
rules:
- hash_and_equals代わりに YAML マップ構文を使用してリンタールールを設定している場合は、linter > rules の下に hash_and_equals: true を追加してください。
analysis_options.yaml
yaml
linter:
rules:
hash_and_equals: true