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 ==:
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:
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:
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:
class C {
const C();
@override
bool operator ==(Object other) => true;
}
final set = {C()};
Salvo indicação em contrário, a documentação neste site reflete Dart 3.13.7. Relatar um problema.
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ê.