Dart:哪种做法更好?使用 'late' 或构造函数初始化列表
Dart: Which is a better practice? Using 'late' or constructor initializer list
我正在为 Dart class 建模,考虑到新的空安全类型。我相信有两种有效的方法来初始化 non-nullable 属性,根据参数计算。
对于此示例,我们将使用收藏夹 class。
这个class在构造函数中使用初始化列表。
class Favourite {
int favouriteId;
Favourite({required this.favouriteId});
Favourite.mapFromJson(dynamic json)
: this.favouriteId = json["favouriteId"];
}
此 class 使用 'late' 关键字。
class Favourite {
late int favouriteId;
Favourite({required this.favouriteId});
Favourite.mapFromJson(dynamic json) {
this.favouriteId = json["favouriteId"];
}
}
你什么时候会用一个而不是另一个?使用 'late' 感觉有风险。如果我添加另一个命名构造函数,编译器就不会抱怨 'favouriteId' 没有被初始化。
还有其他选择吗?
谢谢!
都没有。
使用初始化字段本身的默认构造函数和处理反序列化 json
对象的工厂构造函数:
class Favourite {
final int favouriteId;
Favourite({required this.favouriteId});
factory Favourite.fromMap(Map<String, dynamic> map) {
final favouriteId = json['favouriteId'];
assert(favouriteId != null && favouriteId is int);
return Favourite(
favouriteId: favouriteId,
);
}
}
如果处理不当,late
关键字可能会让人头疼,因此除非万不得已,一般情况下不要使用它。
如果你确定json总是有一个“favouriteId”,你可以这样写:
class Favourite {
int favouriteId;
Favourite({required this.favouriteId});
Favourite.mapFromJson(Map<String, dynamic?> json):
assert(() {
final favouriteId = json["favouriteId"];
return favouriteId != null && favouriteId is int;
}()),
favouriteId = json["favouriteId"] as int;
}
void main() {
dynamic m = {"favouriteId":2};
final favourite = Favourite.mapFromJson(m);
print("favourite id: ${favourite.favouriteId}");
}
我正在为 Dart class 建模,考虑到新的空安全类型。我相信有两种有效的方法来初始化 non-nullable 属性,根据参数计算。
对于此示例,我们将使用收藏夹 class。
这个class在构造函数中使用初始化列表。
class Favourite {
int favouriteId;
Favourite({required this.favouriteId});
Favourite.mapFromJson(dynamic json)
: this.favouriteId = json["favouriteId"];
}
此 class 使用 'late' 关键字。
class Favourite {
late int favouriteId;
Favourite({required this.favouriteId});
Favourite.mapFromJson(dynamic json) {
this.favouriteId = json["favouriteId"];
}
}
你什么时候会用一个而不是另一个?使用 'late' 感觉有风险。如果我添加另一个命名构造函数,编译器就不会抱怨 'favouriteId' 没有被初始化。
还有其他选择吗?
谢谢!
都没有。
使用初始化字段本身的默认构造函数和处理反序列化 json
对象的工厂构造函数:
class Favourite {
final int favouriteId;
Favourite({required this.favouriteId});
factory Favourite.fromMap(Map<String, dynamic> map) {
final favouriteId = json['favouriteId'];
assert(favouriteId != null && favouriteId is int);
return Favourite(
favouriteId: favouriteId,
);
}
}
如果处理不当,late
关键字可能会让人头疼,因此除非万不得已,一般情况下不要使用它。
如果你确定json总是有一个“favouriteId”,你可以这样写:
class Favourite {
int favouriteId;
Favourite({required this.favouriteId});
Favourite.mapFromJson(Map<String, dynamic?> json):
assert(() {
final favouriteId = json["favouriteId"];
return favouriteId != null && favouriteId is int;
}()),
favouriteId = json["favouriteId"] as int;
}
void main() {
dynamic m = {"favouriteId":2};
final favourite = Favourite.mapFromJson(m);
print("favourite id: ${favourite.favouriteId}");
}