相关疑难解决方法(0)

dart工厂构造函数标识符的优点

我一直在调查我的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']
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

我也看到过相同数量的例子,它们并没有将构造函数声明为工厂.两种类型的classname.fromJSON构造函数都是从JSON数据创建一个对象,因此将构造函数声明为工厂还是在这里使用工厂是多余的?

dart flutter

16
推荐指数
2
解决办法
8075
查看次数

了解Factory构造函数代码示例-Dart

我对这里提到的工厂构造函数示例有些疑问(https://www.dartlang.org/guides/language/language-tour#factory-constructors)。我知道在基本级别上只有三种类型的构造函数-默认,命名和参数化。

  1. 为什么factory在这个示例中我应该完全使用?
  2. 是正在使用的命名构造函数吗?为什么呢? 工厂构造函数示例

constructor dart

15
推荐指数
4
解决办法
7198
查看次数

为什么在从地图结构构造新实例时使用工厂?

我试图真正了解来自 API 的 JSON 数据流,直到我可以将其作为对象使用。

现在我想我已经准备好了一切,我唯一的问题是为什么我看到有些人在使用命名构造函数 .fromJson 时使用工厂。根据 Dart 文档:

当我们实现一个并不总是创建类的新实例的构造函数时,我们使用 factory 关键字。

但是在这种情况下,我们总是会在使用 fromJson 时创建一个实例,对吗?

那么为什么有些人使用:

   factory User.fromJson(Map<String, dynamic> json) =>
      User(name: json['name'], alias: json['alias']);
Run Code Online (Sandbox Code Playgroud)

而不是更合理的:

  User.fromJson(Map<String, dynamic> json)
      : name = json['name'],
        alias = json['alias'];
Run Code Online (Sandbox Code Playgroud)

非常感谢您的任何声明。

dart

7
推荐指数
2
解决办法
273
查看次数

命名构造函数是 Dart 中生成构造函数的子集吗?

在构造器的Dart 语言之旅中,它给出了一个生成式构造器的示例:

class Point {
  double x, y;

  Point(double x, double y) {
    // There's a better way to do this, stay tuned.
    this.x = x;
    this.y = y;
  }
}
Run Code Online (Sandbox Code Playgroud)

后来它给出了一个命名构造函数的例子:

class Point {
  double x, y;

  Point(this.x, this.y);

  // Named constructor
  Point.origin() {
    x = 0;
    y = 0;
  }
}
Run Code Online (Sandbox Code Playgroud)

这让我相信,当构造函数使用与类相同的名称时,它是一个生成构造函数:

Point(this.x, this.y);
Run Code Online (Sandbox Code Playgroud)

但是当有一个额外的标识符时,它就是一个命名构造函数:

Point.origin() {
  x = 0;
  y = 0;
}
Run Code Online (Sandbox Code Playgroud)

但是,在我的另一个答案中,Dart 专家将我的“命名构造函数”更改为“生成构造函数”。这让我意识到我可能误解了它们之间的区别。命名构造函数是生成构造函数的子集吗?如果是这样,我如何调用只有类名而没有附加附加标识符的构造函数?

术语“命名构造函数”似乎不在语言规范中

constructor dart

5
推荐指数
1
解决办法
565
查看次数

标签 统计

dart ×4

constructor ×2

flutter ×1