class A {}
class B extends A {}
void fA(A a) {}
void fB(B b) {}
final Map<String, void Function(A)> m = {'test': fB};
在上面的示例中,将fA
分配给'test'
可以正常工作,但是fB
会生成错误:
元素类型
'(B) → void'
无法分配给地图值类型'(A) → void'
。
有没有办法指定值类型是一个接受A
参数的函数?
我也尝试过void Function<T extends A>(T)
,但这会产生另一个错误:
泛型函数不能是类型参数。
我发现让项目编译的唯一方法是在分配时抛出值,这似乎违背了类型检查的目的,因为在这种情况下值类型可能也是dynamic
:
final Map<String, void Function(A)> m = {
'test': fB as void Function(A),
};
可能值得记录为Dart编译器错误。