Dart:工厂方法有可能多态吗?



是的,它与JSON反序列化有关。 我有一个班级JsonStringSerializable

abstract class JsonStringSerializable {
Map<String, dynamic> toJson();
}

我可以扩展

class Cat extends JsonStringSerializable {
@override
Map<String, dynamic> toJson() => null;
factory Cat.fromJson(Map<String, dynamic> json) => null;
}

所以现在我可以使用任何JsonStringSerializable实例并期望实现toJson.

我的问题是我怎样才能对fromJson做同样的事情?在达特中可能吗?

No.

工厂构造函数、生成构造函数或静态方法不是任何接口的一部分。这意味着您不能使用类型对它们进行抽象。"具有toJson(Map<String,dynamic>)构造函数或静态方法的东西"没有类型

您可以做的一件事是对函数本身进行抽象。

T createFromJson<T>(T fromJson(Map<String, dynamic> json), Map<String, dynamic> json) =>
fromJson(json);

然后,您可以使用调用构造函数的函数调用该函数(或者,如果您改用静态方法,则直接使用该方法的撕裂(:

createFromJson((map) => Cat.fromJson(map), json);

最新更新