Dart初始化最终变量

Liu*_*ong 3 dart

用dart编写构造函数时遇到问题。我有一个带有两个最终变量的类,在构造函数中对其进行初始化,以下是错误的,因为最终变量没有setter方法?

class Person{
  final String name;
  final int age; 

  // Error
  Person(String name, int age) {
    this.name = name;
    this.age = age;
  }
}
Run Code Online (Sandbox Code Playgroud)

但这是正确的,为什么

class Person{
  final String name;
  final int age; 

  // Correct
  Person(String name, int age): this.name = name, this.age = age;
}
Run Code Online (Sandbox Code Playgroud)

Gün*_*uer 5

执行构造函数主体时,final字段已经被密封。

构造函数初始值设定项列表在超类的构造函数初始值设定项之前执行。

构造函数主体随后执行。构造函数主体允许执行任意代码,就像从字段读取一样。这就是为什么此时必须已经完成final字段的初始化的原因,否则就有可能从一个尚未初始化的final字段中读取。

构造函数初始化器列表是受支持的窗口,可以在其中初始化最终字段。它不允许读取this(显式或隐式),因此很安全。

这只是确保对象初始化始终以可预测的方式发生的一种措施。