[英]Advanced mapping of JSON in Azure Data Factory - some guidance requested
[英]Factory and named constructor for json mapping in dart
考虑这个代码
class Album {
int userId;
int id;
String title;
Album({this.userId, this.id, this.title});
Album.fromJsonN(Map<String, dynamic> json) {
this.userId = json['userId'];
this.id = json['id'];
this.title = json['title'];
}
factory Album.fromJson(Map<String, dynamic> json) {
return Album(userId: json['userId'], id: json['id'], title: json['title']);
}
}
在大多数教程中,我们对 json 映射方法使用工厂的原因的解释是:“我们在实现不总是创建其类的新实例的构造函数时使用 factory 关键字”。
在上面代码的工厂方法中,它不是返回一个新实例吗? 如果是这样,那么在这里使用工厂的原因是什么? 在这种情况下,工厂构造函数和 fromJsonN 命名构造函数之间有什么区别?
Dart 类可能具有生成构造函数或工厂构造函数。 生成构造函数是一个总是返回类的新实例的函数。 因此,它不使用 return 关键字。
工厂构造函数比生成构造函数具有更宽松的约束。 工厂只需要返回与类相同类型或实现其方法(即满足其接口)的实例。 这可能是类的新实例,但也可能是类的现有实例或子类的新/现有实例(必须与父类具有相同的方法)。 工厂可以使用控制流来确定要返回的对象,并且必须使用 return 关键字。 为了让工厂返回一个新的类实例,它必须首先调用一个生成构造函数。
另请参阅了解工厂构造函数代码示例 - Dart以获得非常详细的解释。
所以对于你的问题:是的,它正在返回一个新的实例,但我想专业来自这样一个事实,即工厂构造函数能够基于传入的 json 映射创建一个对象,而生成构造函数用于实例化一个新对象。单一属性。
对于您的最后一个问题:两者都做同样的事情,即在给定 json 映射的情况下返回类的实例。 技术上的区别在于,一个是生成器,一个是工厂构造函数。
何时使用工厂构造函数或命名构造函数的用例之一。 要初始化类的最终字段,您必须在初始化列表或使用命名构造函数时的声明中进行。 另一方面,使用工厂构造函数您可以初始化构造函数主体中的最终字段。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.