我陷入了编译器错误,可以缩小到这个小片段
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/