2016-04-07 3 views
0

следующее сообщение об ошибке:Ошибка: недопустимый переопределение в ==

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

Происходит в строке 10 следующего кода (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 } 

Я предположил, что бар является подтипом от Foo. В чем проблема с этим кодом?

+0

Не связанный с ошибкой метод 'operator ==' должен принимать любые 'Object'. Если у вас есть код выше и есть 'Bar' и' Foo' в том же 'HashSet', тогда вы получаете ошибки типа, когда он пытается сделать' bar == foo', потому что 'Bar.operator ==' doesn ' t принять 'Foo'. – lrn

ответ

1

Это не может быть ошибкой. Я просто понял, что оператор == должен, вероятно, иметь тип объекта для эффективной работы. Лучшее сообщение об ошибке было бы полезно.

+0

Как вы уже выяснили, когда вы переопределяете оператор ==, параметр должен иметь тип Object, и вы также должны переопределить gethCode getter. Просто хотел добавить хороший источник - http://work.j832.com/2014/05/equality-and-dart.html – Mark

+0

Спасибо. Хорошая статья! – jfp