是的,它与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);