Pular para o conteúdo principal

const_set_element_not_primitive_equality

Detalhes sobre o diagnóstico 'const_set_element_not_primitive_equality' produzido pelo analisador do Dart.

(Antes chamado de const_set_element_type_implements_equals.)

An element in a constant set can't override the '==' operator, or 'hashCode', but the type '{0}' does.

Descrição

#

O analisador emite este diagnóstico quando a classe do objeto usado como elemento em um literal de conjunto constante implementa o operador ==, o getter hashCode, ou ambos. A implementação de conjuntos constantes usa tanto o operador == quanto o getter hashCode, então qualquer implementação diferente das herdadas de Object exige a execução de código arbitrário em tempo de compilação, o que não é suportado.

Exemplo

#

O código a seguir produz este diagnóstico porque o conjunto constante contém um elemento cujo tipo é C, e a classe C sobrescreve a implementação de ==:

dart
class C {
  const C();
​
  @override
  bool operator ==(Object other) => true;
}
​
const set = {C()};

O código a seguir produz este diagnóstico porque o conjunto constante contém um elemento cujo tipo é C, e a classe C sobrescreve a implementação de hashCode:

dart
class C {
  const C();
​
  @override
  int get hashCode => 3;
}
​
const map = {C()};

Correções comuns

#

Se você puder remover a implementação de == e de hashCode da classe, faça isso:

dart
class C {
  const C();
}
​
const set = {C()};

Se você não puder remover a implementação de == e de hashCode da classe, torne o conjunto não constante:

dart
class C {
  const C();
​
  @override
  bool operator ==(Object other) => true;
}
​
final set = {C()};

Encontrou essa página sem tradução ou que precisa de correção? Abra uma issue e nos ajude a manter esse site em PT-BR para ajudar pessoas como você.