以下错误:
ERROR: Invalid override. The type of Bar.== ((Bar) → bool) is not a subtype of
Foo.== ((Foo) → bool).
发生在以下代码(v1.15.0)的第10行中:
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 }
我假设Bar是Foo的子类型。这段代码有什么问题?
这可能不是一个错误。我刚刚意识到==运算符应该有一种Object类型才能有效工作。更好的错误消息会有所帮助。
问题是您在operator ==中提到了类名
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 }
bool operator ==(Foo a)=> foo == a.foo;
bool operator ==(Bar a)=>(bar == a.bar)&&(foo == a.foo);
这两行会引起问题。
您必须像这样更新这些行。
bool operator ==(a)=> foo == a.foo;
bool operator ==(a)=>(bar == a.bar)&&(foo == a.foo);