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

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 である要素が含まれており、クラス ChashCode の実装をオーバーライドしているため、以下のコードは診断を生成します。

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