avoid_equals_and_hash_code_on_mutable_classes
Avoid overloading operator == and hashCode on classes not marked @immutable
.
This rule is available as of Dart 2.6.
Details
#From Effective Dart:
AVOID overloading operator == and hashCode on classes not marked @immutable
.
If a class is not immutable, overloading operator ==
and hashCode
can
lead to unpredictable and undesirable behavior when used in collections.
BAD:
class B {
String key;
const B(this.key);
@override
operator ==(other) => other is B && other.key == key;
@override
int get hashCode => key.hashCode;
}
GOOD:
@immutable
class A {
final String key;
const A(this.key);
@override
operator ==(other) => other is A && other.key == key;
@override
int get hashCode => key.hashCode;
}
NOTE: The lint checks the use of the @immutable
annotation, and will trigger
even if the class is otherwise not mutable. Thus:
BAD:
class C {
final String key;
const C(this.key);
@override
operator ==(other) => other is C && other.key == key;
@override
int get hashCode => key.hashCode;
}
Usage
#To enable the avoid_equals_and_hash_code_on_mutable_classes
rule,
add avoid_equals_and_hash_code_on_mutable_classes
under linter > rules in your
analysis_options.yaml
file:
linter:
rules:
- avoid_equals_and_hash_code_on_mutable_classes
除非另有说明,文档之所提及适用于 Dart 3.5.4 版本,本页面最后更新时间: 2024-08-02。 查看文档源码 或者 报告页面问题。