错误:==中的覆盖无效

时间:2016-04-07 10:01:43

标签: dart override subtype

以下错误:

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的子类型。这段代码有什么问题?

1 个答案:

答案 0 :(得分: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 a)=> foo == a.foo;

布尔运算符==(Bar a)=>(bar == a.bar)&&(foo == a.foo);

这两行会引起问题。

您必须像这样更新这些行。

布尔运算符==(a)=> foo == a.foo;

布尔运算符==(a)=>(bar == a.bar)&&(foo == a.foo);