如果我定义了一堆类:
class A {
final List<int> value;
A(this.value);
static make(List<int> value) => new A(value);
}
// more class defs here
class Z {
final List<String> value;
Z(this.value);
static make(List<String> value) => new A(value);
}
然后以下不起作用,因为Type没有方法
Map<int, Type> typeMap = {0: A, 25: Z};
new typeMap[0]([1, 2, 3])
但以下确实有效。虽然,创建静态make方法需要做很多额外的工作。
Map<int, Function> funcMap = {0: A.make, 25: Z.make};
funcMap[0]([1, 2, 3])
有更好的方法吗?
答案 0 :(得分:1)
不是,不。
有一种将构造函数转换为函数的语法,但它尚未在任何地方实现,并且将来可能会发生变化,因此我不建议使用它。
拥有make
或create
函数的替代方法是在地图中内联编写该函数:
dart
Map<int, Function> funcMap = {0: (v) => new A(v), 25: (v) => new Z(v)};
这个或多或少的可读性是一个品味问题。