我想在Dart中创建一个带有final List
属性的类,它在开始时是空的,以后可以填充。使用下面的代码,我得到了错误“numbers cannot be used as a setter because it's final"。这里让我困惑的是,变量是在构造函数内部初始化的。
class Foo {
final String s;
final List<int> numbers;
Foo(this.s) {
numbers = List<int>(); // error
}
}
最好的方法是什么?
1条答案
按热度按时间3zwtqj6y1#
初始化构造函数的初始值设定项列表中的示例变量:
在Dart中,final变量在构造函数体 * 开始 * 运行时是不可赋值的。构造函数体内的代码只是普通的代码,可以访问对象,并对它做任何事情。Dart通过要求final变量在构造函数体启动前初始化,确保没有人能看到处于未初始化状态的final示例变量。这意味着在初始化器列表中(或者作为初始化形式,如
this.s
,或者通过在变量声明本身上具有初始化器表达式)。(The
List()
构造函数已被大量弃用,并且很快真实的,因此请改用列表文字来创建列表。)