【问题标题】:Dart: Type error when overrding generic function in abstract classDart:在抽象类中覆盖泛型函数时出现类型错误
【发布时间】:2020-11-02 09:10:18
【问题描述】:
在 Dart/flutter 中,我有以下类:
abstract class Base {
V foo<V, T>(T arg);
}
class Concrete implements Base {
@override
TypeA foo<TypeA, TypeB>(TypeB arg) {
//... do something and return TypeA variable x
return x;
}
}
TypeA 和 TypeB 是用户定义的类型。但是,我收到错误消息:。有线!你能帮我理解这里发生了什么吗?我尝试的是一个通用的 API 函数 foo() ,其中输入和输出类型可以由实现的类灵活定义。
【问题讨论】:
标签:
generics
dart
overriding
abstract
【解决方案1】:
问题是这里的TypeA 和TypeB 是不是 用户定义的类型。它们是类型变量,恰好与用户定义的类型同名。
对Concrete.foo 的每次调用都需要传递类型参数,并且主体需要适用于任何 类型参数(这就是“通用”的意思,它通常适用于任何类型)。
如果你试图从Concrete.foo返回用户定义类型TypeA的东西,你会得到一个错误,因为它没有类型变量TypeA的类型...对于any 可以作为类型参数传递的类型。
我猜你想要的是一个泛型类:
abstract class Base<V, T> {
V foo(T arg);
}
class Concrete implements Base<TypeA, TypeB> {
@override
TypeA foo(TypeB arg) {
//... do something and return TypeA variable x
return x;
}
}
用实际的TypeA 和TypeB 参数化接口。