未初始化 final class 变量的构造函数
Constructor with not initialized final class variables
我有这个class:
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,因为它没有被初始化。如果未提供构造函数参数,是否可以将其默认为空列表?
您可以使用工厂构造函数:
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});
}
您可以在初始化列表中初始化字段,而不是使用 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
构造函数,所以我只需要写一次。
我有这个class:
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,因为它没有被初始化。如果未提供构造函数参数,是否可以将其默认为空列表?
您可以使用工厂构造函数:
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});
}
您可以在初始化列表中初始化字段,而不是使用 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
构造函数,所以我只需要写一次。