映射函数类型中的Dart类继承

问题描述 投票:0回答:1
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),
};
dictionary inheritance dart polymorphism type-systems
1个回答
0
投票

可能值得记录为Dart编译器错误。

© www.soinside.com 2019 - 2024. All rights reserved.