invalid_ implementation_ override
Detalhes sobre o diagnóstico 'invalid_implementation_override' produzido pelo analisador do Dart.
'{0}.{1}' ('{2}') isn't a valid concrete implementation of '{3}.{1}' ('{4}').
The setter '{0}.{1}' ('{2}') isn't a valid concrete implementation of '{3}.{1}' ('{4}').
Descrição
#O analisador produz este diagnóstico quando todas as condições a seguir são verdadeiras:
- Uma classe define um membro abstrato.
- Há uma implementação concreta desse membro em uma superclasse.
- A implementação concreta não é uma implementação válida do método abstrato.
A implementação concreta pode ser inválida por incompatibilidades no tipo de retorno, nos tipos dos parâmetros do método ou nos parâmetros de tipo.
Exemplo
#
O código a seguir produz este diagnóstico porque o método A.add tem um
parâmetro do tipo int, e o método B.add, que o sobrescreve, tem um parâmetro
correspondente do tipo num:
class A {
int add(int a) => a;
}
class B extends A {
int add(num a);
}
Isso é um problema porque, em uma invocação de B.add como a seguinte:
void f(B b) {
b.add(3.4);
}
B.add deve aceitar, por exemplo, um double, mas quando o método A.add
é
executado (porque é a única implementação concreta de add), uma exceção em
tempo de execução será lançada, pois um double não pode ser atribuído a um
parâmetro do tipo int.
Correções comuns
#Se o método na subclasse puder se adequar à implementação na superclasse, então altere a declaração na subclasse (ou remova-a, se for igual):
class A {
int add(int a) => a;
}
class B extends A {
int add(int a);
}
Se o método na superclasse puder ser generalizado para ser uma implementação válida do método na subclasse, então altere o método da superclasse:
class A {
int add(num a) => a.floor();
}
class B extends A {
int add(num a);
}
Se nem o método da superclasse nem o da subclasse puderem ser alterados, então forneça uma implementação concreta do método na subclasse:
class A {
int add(int a) => a;
}
class B extends A {
int add(num a) => a.floor();
}
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ê.