Dart:在抽象类中覆盖泛型函数时发生类型错误

时间:2020-11-02 09:10:18

标签: generics dart overriding abstract

在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(),其中输入和输出类型可以由实现的类灵活地定义。

1 个答案:

答案 0 :(得分:0)

问题是这里的TypeATypeB 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;
   }
}

使用实际的TypeATypeB参数化接口

相关问题