[英]Type error when when trying to override a generic function in a concrete implementation of an abstract class
[英]Dart: Type error when overrding generic function in abstract class
在 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 是用户定义的类型。 但是,我收到错误消息:<The value of type B can't be returned from method 'foo' because it has a return type of TypeB>。 有线! 你能帮我理解这里发生了什么吗? 我试图得到的是一个通用的 API 函数 foo(),其中输入和输出类型可以由实现的类灵活定义。
问题是这里的TypeA
和TypeB
不是用户定义的类型。 它们是恰好与用户定义的类型同名的类型变量。 对Concrete.foo
每次调用都需要传递类型参数,并且主体需要适用于任何类型参数(这就是“通用”的意思,它通常适用于任何类型)。
如果您尝试从Concrete.foo
返回用户定义类型TypeA
某些内容,则会出现错误,因为它没有类型变量TypeA
... 的类型,对于可以作为类型参数传递的任何类型。
我的猜测是你想要的是一个泛型类:
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
参数化接口。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.