jas*_*xir 1 polymorphism inheritance dart
是的,它与 JSON 反序列化有关。我有课JsonStringSerializable
abstract class JsonStringSerializable {
Map<String, dynamic> toJson();
}
Run Code Online (Sandbox Code Playgroud)
我可以扩展
class Cat extends JsonStringSerializable {
@override
Map<String, dynamic> toJson() => null;
factory Cat.fromJson(Map<String, dynamic> json) => null;
}
Run Code Online (Sandbox Code Playgroud)
所以现在我可以使用 的任何实例JsonStringSerializable并期望 的实现toJson。
我的问题是我怎样才能做同样的事情fromJson?在Dart中可能吗?
不。
工厂构造函数、生成构造函数或静态方法不是任何接口的一部分。这意味着您无法使用类型对它们进行抽象。没有“具有构造函数或静态方法的东西”的类型。toJson(Map<String,dynamic>)
您可以做的一件事就是对函数本身进行抽象。
T createFromJson<T>(T fromJson(Map<String, dynamic> json), Map<String, dynamic> json) =>
fromJson(json);
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用调用构造函数的函数来调用该函数(或者如果您使用静态方法,则直接删除该方法):
createFromJson((map) => Cat.fromJson(map), json);
Run Code Online (Sandbox Code Playgroud)