Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dart 如何创建创建不同类型对象的分派表_Dart - Fatal编程技术网

Dart 如何创建创建不同类型对象的分派表

Dart 如何创建创建不同类型对象的分派表,dart,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> val

如果我定义一组类:

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);
}
A类{
最终列表值;
A(该值);
静态生成(列表值)=>新A(值);
}
//这里有更多的课堂演示
Z类{
最终列表值;
Z(该值);
静态生成(列表值)=>新A(值);
}
那么下面的方法就不起作用了,因为Type没有方法

Map<int, Type> typeMap = {0: A, 25: Z};
new typeMap[0]([1, 2, 3])
Map-typeMap={0:A,25:Z};
新类型映射[0]([1,2,3])
但以下方法确实有效。尽管如此,创建静态make方法需要大量额外的工作

Map<int, Function> funcMap = {0: A.make, 25: Z.make};
funcMap[0]([1, 2, 3])
Map funcMap={0:A.make,25:Z.make};
funcMap[0]([1,2,3])
有更好的方法吗?

不,没有

有一种将构造函数转换为函数的语法,但它还没有在任何地方实现,而且将来可能会改变,所以我不建议使用它

使用
make
create
函数的替代方法是在映射中内联编写该函数:
省道
Map funcMap={0:(v)=>新的A(v),25:(v)=>新的Z(v)};

可读性是多少取决于品味。

,如果不是用于浏览器,则取决于
dart:mirrors
(带镜像的dart2js可能会导致生成的JS输出文件的代码膨胀)。谢谢。将构造函数转换为函数的语法是什么。我更愿意做Foo(x,y)而不是newfoo(x,y)。