如何在Dart中对类分派构造函数?

如何在Dart中对类分派构造函数?,dart,Dart,我以前有下面的代码,它工作得很好。(请注意,Card、SearchResults、Quike都是extend Persistable,Persistable包含构造函数。fromMap) Persistable fromString(字符串值){ Map m=解析(值); 开关(m['type']){ 案例“卡”: 从地图(m)返回新卡; “搜索结果”案例: 返回新的搜索结果。fromMap(m); 个案"问答游戏: 返回新的测验。fromMap(m); } } 有点罗嗦,所以我想我会把它分为

我以前有下面的代码,它工作得很好。(请注意,Card、SearchResults、Quike都是extend Persistable,Persistable包含构造函数
。fromMap

Persistable fromString(字符串值){
Map m=解析(值);
开关(m['type']){
案例“卡”:
从地图(m)返回新卡;
“搜索结果”案例:
返回新的搜索结果。fromMap(m);
个案"问答游戏:
返回新的测验。fromMap(m);
}
}
有点罗嗦,所以我想我会把它分为两部分。我首先有这个:

静态最终地图查找=
{'card':卡片,
“searchresults”:搜索结果,
“测验”:测验};
似乎是合理的,但当我试图重新定义该方法时,我感到困惑

Persistable fromString(字符串值){
Map m=解析(值);
字符串类型=m['type'];
持久性p=查找[类型];
…困惑,这不可能是对的
…最终想要“返回新的p.fromMap(m)”;
}

Persistable p
实际上意味着类的一个实例
Persistable
。我如何键入我的
查找
映射,使其值属于类
Persistable
,以便我可以调用它们的
。fromMap
构造函数?

首先,我认为您最初的方法是完全有效的,不应该丢弃仅仅因为它的冗长。 我相信替代方法会带来额外的复杂性,并且只有当您确实需要动态调度时才是合理的(例如,如果您为持久性编写库,并且希望为库的客户端添加为持久性注册任意类的能力) 如果您必须进行动态调度,我相信有两种主要的可能性: -反射API。最近反射库得到了同步API,所以这种方法现在比以前便宜得多。我相信反射总会带来一些成本。 -使用核心省道功能

对于第二种方法,您可以使用某种技巧动态模拟构造函数调用。 例如,您可以在映射中存储的不是类型变量,而是返回所需类实例的函数:

因此,您的代码可能看起来像

静态最终地图查找=新地图
静态无效注册表类(字符串类名称,工厂){
查找[className]=工厂;
}
静态持久化getInstance(字符串类名称,映射){
返回查找[className](映射);
}
在客户端:

。。。。
registerClass('quick',(map)=>newquick.fromMap(map));
registerClass('card',(map)=>newcard.fromMap(map));
(注意-我没有测试这个)
您可以在

中查找该方法的工作示例代码,因此您希望从
Map lookut
JSon对象中构建类
Persistable
,然后通过
lookup[]
赋值将(?)强制强制转换到类中?为什么您不能只执行
Persistable p=new Persistable().fromMap(lookup);