无法初始化Dart构造函数内的final属性

6jygbczu  于 2022-12-06  发布在  其他
关注(0)|答案(1)|浏览(198)

我想在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
  }
}

最好的方法是什么?

3zwtqj6y

3zwtqj6y1#

初始化构造函数的初始值设定项列表中的示例变量:

Foo(this.s) : numbers = <int>[];

在Dart中,final变量在构造函数体 * 开始 * 运行时是不可赋值的。构造函数体内的代码只是普通的代码,可以访问对象,并对它做任何事情。Dart通过要求final变量在构造函数体启动前初始化,确保没有人能看到处于未初始化状态的final示例变量。这意味着在初始化器列表中(或者作为初始化形式,如this.s,或者通过在变量声明本身上具有初始化器表达式)。
(The List()构造函数已被大量弃用,并且很快真实的,因此请改用列表文字来创建列表。)

相关问题