2016-04-07 20 views
0

Der folgende Fehler:Fehler: ungültige Überschreibung in ==

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

in Zeile 10 Tritt des folgenden Codes (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 } 

ich angenommen habe, dass Bar ist ein Subtyp von Foo. Was ist das Problem mit diesem Code?

+0

Unabhängig vom Fehler sollte die Methode 'operator ==' jedes 'Objekt' akzeptieren. Wenn Sie den obigen Code haben und eine 'Bar' und eine' Foo' im selben 'HashSet' haben, dann erhalten Sie Typfehler, wenn Sie versuchen,' bar == foo' zu tun, weil 'Bar.operator ==' doesn ' t akzeptiere ein 'Foo'. – lrn

Antwort

1

Dies ist möglicherweise kein Fehler. Ich habe gerade festgestellt, dass der Operator == wahrscheinlich einen Objekttyp haben muss, um effektiv zu arbeiten. Eine bessere Fehlermeldung wäre hilfreich.

+0

Wie Sie bereits herausgefunden haben, wenn Sie den Operator == überschreiben, sollte der Parameter vom Typ Objekt sein, und Sie sollten auch den HashCode-Getter überschreiben. Ich wollte nur eine gute Quelle hinzufügen - http://work.j832.com/2014/05/equality-and-dart.html – Mark

+0

Danke. Guter Artikel! – jfp