我上了这个课:
class Entry {
final String id;
final List<ListEntry> listEntries;
Entry({this.listEntries}):
id = Uuid().v4();
Entry.withId({this.id, this.listEntries});
}
// create new class instance
var e = Entry();
现在,当我在e.listEntries
上调用任何方法时,我将得到一个NPE,因为它尚未初始化。如果没有提供构造函数参数,是否可以将其默认为空列表?
答案 0 :(得分:1)
您可以使用Factory构造函数:
class Entry {
final String id;
final List<String> listEntries;
factory Entry({List<String> listEntries}) {
return Entry._(listEntries ?? []);
}
Entry._(this.listEntries):
id = Uuid().v4();
Entry.withId({this.id, this.listEntries});
}
答案 1 :(得分:1)
您可以在初始化列表中初始化该字段,而不必使用this.ListEntries
(初始化形式)。
class Entry {
final String id;
final List<ListEntry> listEntries;
Entry({List<ListEntry> listEntries})
: this.withId(id: Uuid().v4(), listEntries: listEntries);
Entry.withId({this.id, this.listEntries})
: listEntries = listEntries ?? [];
}
// create new class instance
var e = Entry();
这里我重用了Entry.withId
构造函数,所以我只需要写一次。