const_set_element_not_primitive_equality
(曾用名 const_set_element_type_implements_equals)
常量集合中的元素不能覆盖“==”运算符或“hashCode”,但类型“{0}”做到了。
描述
#当用作常量集合字面量中元素的对象的类实现了 == 运算符、hashCode getter,或两者都实现时,分析器会产生此诊断。常量集合的实现使用了 == 运算符和 hashCode getter,因此除了从 Object 继承的实现之外的任何其他实现都需要在编译时执行任意代码,这是不受支持的。
示例
#以下代码会产生此诊断,因为常量集合包含一个类型为 C 的元素,并且类 C 覆盖了 == 的实现。
dart
class C {
const C();
bool operator ==(Object other) => true;
}
const set = {C()};以下代码会产生此诊断,因为常量集合包含一个类型为 C 的元素,并且类 C 覆盖了 hashCode 的实现。
dart
class C {
const C();
int get hashCode => 3;
}
const map = {C()};常见修复方法
#如果可以从类中移除 == 和 hashCode 的实现,请这样做
dart
class C {
const C();
}
const set = {C()};如果无法从类中移除 == 和 hashCode 的实现,则将该集合设为非常量
dart
class C {
const C();
bool operator ==(Object other) => true;
}
final set = {C()};