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