const_map_key_not_primitive_equality
常量 map 中鍵的型別不能覆寫 '==' 運算子或 'hashCode',但類 '{0}' 做到了。
描述
#當用作常量 map 字面量中鍵的物件的類實現了 == 運算子、hashCode getter 或兩者時,分析器會產生此診斷。常量 map 的實現同時使用了 == 運算子和 hashCode getter,因此除了繼承自 Object 的實現之外的任何實現都需要在編譯時執行任意程式碼,而這是不受支援的。
示例
#以下程式碼會產生此診斷,因為該常量 map 包含一個型別為 C 的鍵,並且類 C 覆寫了 == 的實現
dart
class C {
const C();
bool operator ==(Object other) => true;
}
const map = {C() : 0};以下程式碼會產生此診斷,因為該常量 map 包含一個型別為 C 的鍵,並且類 C 覆寫了 hashCode 的實現
dart
class C {
const C();
int get hashCode => 3;
}
const map = {C() : 0};常見修復方法
#如果可以從類中移除 == 和 hashCode 的實現,請執行此操作
dart
class C {
const C();
}
const map = {C() : 0};如果無法從類中移除 == 和 hashCode 的實現,則將該 map 設為非常量
dart
class C {
const C();
bool operator ==(Object other) => true;
}
final map = {C() : 0};