invalid_implementation_override
'{1}.{0}' ('{2}') 不是 '{3}.{0}' ('{4}') 的有效具体实现。
setter '{1}.{0}' ('{2}') 不是 '{3}.{0}' ('{4}') 的有效具体实现。
描述
#当满足以下所有条件时,分析器会生成此诊断信息:
- 类定义了一个抽象成员。
- 其超类中存在该成员的具体实现。
- 该具体实现不是抽象方法的有效实现。
具体实现可能无效的原因是返回类型、方法参数类型或类型参数不兼容。
示例
#以下代码会生成此诊断信息,因为方法 A.add
的参数类型为 int
,而覆盖方法 B.add
的对应参数类型为 num
:
dart
class A {
int add(int a) => a;
}
class B extends A {
int add(num a);
}
这是个问题,因为在对 B.add
的调用中,例如:
dart
void f(B b) {
b.add(3.4);
}
B.add
期望能够接受(例如)一个 double
类型的值,但当方法 A.add
被执行时(因为它是 add
唯一的具体实现),会抛出运行时异常,因为 double
类型的值无法赋值给 int
类型的参数。
常见修复方法
#如果子类中的方法可以符合超类中的实现,则更改子类中的声明(如果相同则删除)
dart
class A {
int add(int a) => a;
}
class B extends A {
int add(int a);
}
如果超类中的方法可以被泛化以成为子类中方法的有效实现,则更改超类方法
dart
class A {
int add(num a) => a.floor();
}
class B extends A {
int add(num a);
}
如果超类中的方法和子类中的方法都不能更改,则在子类中提供该方法的具体实现
dart
class A {
int add(int a) => a;
}
class B extends A {
int add(num a) => a.floor();
}