gpt4 book ai didi

工厂构造函数标识符的 Dart 优势

转载 作者:IT老高 更新时间:2023-10-28 12:30:47 26 4
gpt4 key购买 nike

我一直在调查我的 Flutter 应用程序的 JSON 解析,并且有一个关于我无法解决的工厂构造函数的问题。我试图了解使用工厂构造函数与普通构造函数的优势。例如,我看到很多 JSON 解析示例,它们使用如下的 JSON 构造函数创建模型类:

class Student{
String studentId;
String studentName;
int studentScores;

Student({
this.studentId,
this.studentName,
this.studentScores
});

factory Student.fromJson(Map<String, dynamic> parsedJson){
return Student(
studentId: parsedJson['id'],
studentName : parsedJson['name'],
studentScores : parsedJson ['score']
);
}
}

我还看到了相同数量的不将构造函数声明为工厂的示例。两种类型的 classname.fromJSON 构造函数都从 JSON 数据创建一个对象,因此将构造函数声明为工厂或在此处使用工厂是多余的吗?

最佳答案

普通构造函数总是返回当前类的新实例(构造函数抛出异常时除外)。

工厂构造函数与静态方法非常相似,不同之处在于它

  • 只能返回当前类或其子类之一的实例
  • 可以用 new 调用,但现在不太相关了,因为 new 变成了可选的。
  • 没有初始化列表(没有 : super())

所以可以使用工厂构造函数

  • 创建子类的实例(例如取决于传递的参数
  • 返回一个缓存实例而不是一个新实例
  • 准备计算值以将它们作为参数转发给普通构造函数,以便可以使用它们初始化最终字段。这通常用于解决在普通构造函数的初始化列表中可以完成的操作的限制(例如错误处理)。

在您的示例中,此代码

  studentId: parsedJson['id'],
studentName : parsedJson['name'],
studentScores : parsedJson ['score']

可以移动到普通构造函数的主体,因为不需要初始化 final 字段。

关于工厂构造函数标识符的 Dart 优势,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52299304/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com