具有未初始化的最终类变量的构造函数

时间:2019-08-21 06:00:43

标签: dart constructor final

我上了这个课:

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,因为它尚未初始化。如果没有提供构造函数参数,是否可以将其默认为空列表?

2 个答案:

答案 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构造函数,所以我只需要写一次。