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(

我在中遇到了一个有用的解析复杂JSON工具。将以JSON为例,用您选择的编程语言对其进行解析

我目前正在使用Dart,对于我的简单原始JSON“内容”示例:

被此解析将创建此Dart类:

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"]);