Dart 为什么在这种情况下使用工厂构造函数
我在中遇到了一个有用的解析复杂JSON工具。将以JSON为例,用您选择的编程语言对其进行解析 我目前正在使用Dart,对于我的简单原始JSON“内容”示例: 被此解析将创建此Dart类:Dart 为什么在这种情况下使用工厂构造函数,dart,flutter,Dart,Flutter,我在中遇到了一个有用的解析复杂JSON工具。将以JSON为例,用您选择的编程语言对其进行解析 我目前正在使用Dart,对于我的简单原始JSON“内容”示例: 被此解析将创建此Dart类: import 'dart:convert'; Content contentFromJson(String str) => Content.fromJson(json.decode(str)); String contentToJson(Content data) => json.encode(
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,
};
}
导入'dart:convert';
Content contentFromJson(String str)=>Content.fromJson(json.decode(str));
字符串contentToJson(Content data)=>json.encode(data.toJson());
课堂内容{
字符串标题;
内容({
这个名字,
});
factory Content.fromJson(映射json)=>新内容(
标题:json[“标题”],
);
映射到JSON()=>{
“头衔”:头衔,
};
}
在这种情况下,工厂建造师的目的是什么?没有存储内容类实例化的“私有”变量。没有检查缓存或键,以便在使用相同原始JSON数据参数的后续Content.fromJson调用中返回已实例化的内容类
由于使用了factory关键字,这是否意味着Dart仅因为方法被表示为factory构造函数而在幕后处理重用相同的实例化?在该示例中,我认为没有必要使用
factory
。它可能是一个普通的命名构造函数:
Content.fromJson(Map<String, dynamic> json) : this(title: json["title"]);
Content.fromJson(映射json):这个(标题:json[“title”]);
这就是说,即使不必要,factory
也有一些有用的原因:
- 它保留了一种可能性,即有一天它可以返回一个现有实例,而不是保证一个新实例
- 如果将任何错误检查代码添加到
,则可能需要构造函数主体,并且可能无法再委托给主构造函数。Content.fromJson
构造函数不使用初始化列表,因此没有该限制factory
工厂
构造函数也是不必要的,因为它也可以是静态
方法()
Content.fromJson(Map<String, dynamic> json) : this(title: json["title"]);