我陷入了编译器错误,可以缩小到这个小片段
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类型。 拜托,有人吗?
答案 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中的关键字。