跳到主要内容

field_initialized_in_initializer_and_declaration

如果字段是 final 且已在其声明时初始化,则不能在构造函数中再次初始化。

描述

#

当 final 字段在其声明处和构造函数初始化器中都进行了初始化时,分析器会生成此诊断信息。final 字段只能赋值一次,因此不能在两处进行初始化。

示例

#

以下代码会生成此诊断信息,因为 f

dart
class C {
  final int f = 0;
  C() : f = 1;
}

常见修复方法

#

如果初始化不依赖于传递给构造函数的任何值,并且所有构造函数都需要将字段初始化为相同的值,则从构造函数中移除初始化器

dart
class C {
  final int f = 0;
  C();
}

如果初始化依赖于传递给构造函数的值,或者如果不同的构造函数需要以不同的方式初始化字段,则移除字段声明中的初始化器

dart
class C {
  final int f;
  C() : f = 1;
}