Why use the factory constructor in this case
在本文中,我遇到了一个有用的Parsing Complex JSON工具。该工具将以JSON示例为例,并以您选择的编程语言对其进行解析。
我目前正在使用Dart,并使用我的简单原始JSON"内容"示例:
1 2 3 | { "title":"Welcome to quicktype!" } |
在Dart中被此JSON工具解析后,将创建以下Dart类:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | import 'dart:convert'; Content contentFromJson(String str) => Content.fromJson(json.decode(str)); String contentToJson(Content data) => json.encode(data.toJson()); class Content { String title; Content({ this.title, }); factory Content.fromJson(Map<String, dynamic> json) => new Content( title: json["title"], ); Map<String, dynamic> toJson() => { "title": title, }; } |
在这种情况下,工厂构造函数的目的是什么?没有存储Content类实例的"私有"变量。没有检查缓存或键,以便已实例化的Content类在使用相同的原始JSON数据参数的后续Content.fromJson调用中返回。
因为使用了factory关键字,这是否意味着Dart仅仅因为该方法被表示为Factory构造函数,就可以处理在后台重用相同的实例化?
在该示例中,我看不到需要使用
1 | Content.fromJson(Map<String, dynamic> json) : this(title: json["title"]); |
也就是说,即使没有必要,
-
打开某天它可能返回一个现有实例而不是保证一个新实例的可能性。
-
如果在
Content.fromJson 中添加了任何错误检查代码,则可能需要构造函数主体,并且可能不再能够委托给主构造函数。factory 构造函数不使用初始化列表,因此没有该限制。
当然,在这种情况下,