【问题标题】: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】:

    问题是这里的TypeATypeB不是 用户定义的类型。它们是类型变量,恰好与用户定义的类型同名。 对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;
       }
    }
    

    用实际的TypeATypeB 参数化接口

    【讨论】:

      猜你喜欢
      • 2015-09-07
      • 2012-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-16
      • 1970-01-01
      • 2020-03-12
      • 2020-05-14
      相关资源
      最近更新 更多