在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是用户定义的类型。但是,我收到错误消息:<不能从方法'foo'返回TypeB类型的值,因为它的返回类型为TypeB>。有线!您能帮我了解这里发生了什么。我试图获得的是一个通用的API函数foo(),其中输入和输出类型可以由实现的类灵活地定义。
答案 0 :(得分:0)
问题是这里的TypeA
和TypeB
是 not 用户定义的类型。它们是类型变量,恰好与用户定义的类型具有相同的名称。
每次对Concrete.foo
的调用都需要传递类型实参,并且主体需要为任何类型实参工作(这就是“泛型”的意思,它通常适用于任何类型)。
如果您尝试从TypeA
返回用户定义类型Concrete.foo
的内容,则会出现错误,因为它没有类型变量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
参数化接口。