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()};