如何创建一个创建不同类型对象的调度表

时间:2016-10-31 20:00:25

标签: dart

如果我定义了一堆类:

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])

有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

不是,不。

有一种将构造函数转换为函数的语法,但它尚未在任何地方实现,并且将来可能会发生变化,因此我不建议使用它。

拥有makecreate函数的替代方法是在地图中内联编写该函数: dart Map<int, Function> funcMap = {0: (v) => new A(v), 25: (v) => new Z(v)}; 这个或多或少的可读性是一个品味问题。