2016-04-07 4 views
0

l'erreur suivante:Erreur: override non valide dans ==

ERROR: Invalid override. The type of Bar.== ((Bar) → bool) is not a subtype of 
Foo.== ((Foo) → bool). 

se produit dans la ligne 10 du code ci-dessous (v1.15.0):

1 class Foo { 
2 int foo; 

3 Foo(this.foo); 

4 bool operator ==(Foo a) => foo == a.foo; 
5 int get hashCode => foo * 17; 
6 } 

7 class Bar extends Foo { 
8 int bar; 

8 Bar(int foo, this.bar) : super(foo); 

10 bool operator ==(Bar a) => (bar == a.bar) && (foo == a.foo); 
11 int get hashCode => bar * (foo * 17); 
12 } 

j'ai supposé que Bar est un sous-type de Foo. Quel est le problème avec ce code?

+0

Non liée à l'erreur, la méthode 'operator ==' devrait accepter tout 'Object'. Si vous avez le code ci-dessus et avez un 'Bar' et un' Foo' dans le même 'HashSet', alors vous obtenez des erreurs de type quand il essaie de faire' bar == foo' parce que 'Bar.operator ==' doesn ' t accepter un 'Foo'. – lrn

Répondre

1

Ceci peut ne pas être un bug. Je viens de réaliser que l'opérateur == devrait probablement avoir un type d'objet pour fonctionner efficacement. Un meilleur message d'erreur serait utile.

+0

Comme vous l'avez déjà compris, lorsque vous remplacez l'opérateur ==, le paramètre doit être de type Object et vous devez également remplacer le getter de hashCode. Je voulais juste ajouter une bonne source - http://work.j832.com/2014/05/equality-and-dart.html – Mark

+0

Merci. Bon article! – jfp