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

时间:2019-07-24 09:28:00

标签: 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类型。 拜托,有人吗?

1 个答案:

答案 0 :(得分:1)

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

ReturnType Function(ParameterType parameterName) functionName

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

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

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