dart typedef子类函数失败

问题描述

我有一个功能签名

typedef ActionFunc = void Function(SamModel sm,SamReq req);

我有一个继承SamModel的类

class Rocket extends SamModel {

这是失败的代码

  void lightRocket(Rocket r,SamReq req) {
    ...
  }

  void addFunc(String str,ActionFunc af) {
   ...
  }

  ... 

  addFunc("func-name",lightRocket); //<--- fails at this point

以上操作因Dart的说法而失败:

'''type'(Rocket,SamReq)=> void'不是'(SamModel,SamReq)=> void'''

的子类型

当我将lightRocket重新编码为:

  void lightRocket(SamModel sm,SamReq req) {
    Rocket r = sm as Rocket; // Can i get rid of this?
    ...
  }

有效。我有许多要添加的功能,例如lightRocket,并且想要消除强制转换操作。使用泛型或其他技巧可以做到这一点吗?

解决方法

正确的解决方法是:

void lightRocket(covariant Rocket r,SamReq req) {
    ...
}

感谢https://stackoverflow.com/users/13250142/christopher-moore

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...