dart - 通用功能:非预期类型的​​类型

标签 dart

我陷入了编译器错误,可以缩小到这个小片段

class A {}

class B extends A {}

B b;

void testB(B b) {}
void callIt<T extends A>(T param, void func(T)) => func(param);
void main() {
  callIt(b, testB);
}

它拒绝与error: The function 'testB' has type 'void Function(B)' that isn't of expected type 'void Function(dynamic)'. This means its parameter or return type does not match what is expected. (strong_mode_invalid_cast_function at [pavement] lib\main.dart:13)
与相同的错误
  callIt<B>(b, testB);

我可以解决
    void testB(b) {}

但是我真的很想在这里保留param类型。
拜托,有人吗?

最佳答案

这是由于您的func表示法引起的。我不知道您从哪里得到的,但是这里是工作符号:

ReturnType Function(ParameterType parameterName) functionName

将其应用于您的示例,您的函数应如下所示(为可读性添加了花括号):

void callIt<T extends A>(T param, void Function(T t) func) {
  func(param);
}

language tour中,您可以看到Function是Dart中的关键字。

关于dart - 通用功能:非预期类型的​​类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57179598/

相关文章:

data-binding - 如果多行属性绑定(bind)到聚合物表达式,则聚合物 Dart 核心输入验证不起作用

reflection - Dart ,如何使用反射获取方法参数的通用类型?

flutter - 未处理的异常: 'List<dynamic>'类型不是'Map <String,dynamic'类型的子类型

Flutter 如何模拟对 rootBundle.loadString(...) 的调用,然后重置模拟的行为?

flutter - 如何在 flutter web 中导入依赖项?

flutter - 如何防止用户在Flutter Web(PWA)中使用伪造的gps

dart - Angular2Dart和NG指令

flutter - StreamBuilder 监听流和常规监听方法的区别

dart - angular.dart NgTwoWay和NgAttr已弃用?

flutter - 将子类分配给 Dart 中的工厂构造函数