错误:==中的覆盖无效

问题描述 投票:0回答:2

以下错误:

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

dart override subtype
2个回答
1
投票

这可能不是一个错误。我刚刚意识到==运算符应该有一种Object类型才能有效工作。更好的错误消息会有所帮助。


0
投票

问题是您在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);

© www.soinside.com 2019 - 2024. All rights reserved.