メインコンテンツにスキップ

const_map_key_not_primitive_equality

定数マップのキーの型は、`==` 演算子や `hashCode` をオーバーライドすることはできませんが、クラス `{0}` はオーバーライドしています。

説明

#

定数マップリテラルでキーとして使用されるオブジェクトのクラスが、== 演算子、hashCode ゲッター、またはその両方を実装している場合に、アナライザーはこの診断を生成します。定数マップの実装では、== 演算子と hashCode ゲッターの両方が使用されるため、Object から継承されたもの以外の実装は、コンパイル時に任意のコードを実行する必要があり、これはサポートされていません。

#

以下のコードは、定数マップにキーの型が C である要素が含まれており、クラス C== の実装をオーバーライドしているため、この診断を生成します。

dart
class C {
  const C();

  bool operator ==(Object other) => true;
}

const map = {C() : 0};

以下のコードは、定数マップにキーの型が C である要素が含まれており、クラス ChashCode の実装をオーバーライドしているため、この診断を生成します。

dart
class C {
  const C();

  int get hashCode => 3;
}

const map = {C() : 0};

一般的な修正

#

クラスから == および hashCode の実装を削除できる場合は、削除してください。

dart
class C {
  const C();
}

const map = {C() : 0};

クラスから == および hashCode の実装を削除できない場合は、マップを定数でないものにしてください。

dart
class C {
  const C();

  bool operator ==(Object other) => true;
}

final map = {C() : 0};