基本上,这就是我想要做的:
ClassName
{
final OtherClass field;
ClassName()
{
field = new OtherClass(this);
}
}
基本上,这就是我想要做的:
ClassName
{
final OtherClass field;
ClassName()
{
field = new OtherClass(this);
}
}
不可能在构造函数主体中分配最终字段。final 字段需要在构造函数主体之前、初始化器列表或声明中分配:
class ClassName
{
final OtherClass field = new OtherClass(); // Here
ClassName()
: field = new OtherClass() // or here
{
}
}
由于你不能this
在初始化列表或声明中使用,你不能做你打算做的事情。
使用 null safetyfinal
,您可以以不同的方式初始化字段:
申报时:
class Foo{
final int bar = 1;
}
在构造函数参数中(初始化形式)。
class Foo {
final int bar;
// Initializing in constructor parameter.
Foo(this.bar);
}
在初始化列表中。
class Foo {
final int bar;
// Initializer list
Foo() : bar = 1;
}
以上两者的结合。
class Foo {
final int bar;
Foo(int value) : bar = value;
}
使用late
关键字进行延迟初始化。
class Foo {
late final int bar; // Initialize it later, maybe in a method
}
从 Dart 2.12 开始,可以使用late关键字。下面的代码打印 5:
class ClassName
{
final int var1 = 5;
late final OtherClass field;
ClassName()
{
field = new OtherClass(this);
}
}
class OtherClass {
OtherClass(ClassName object) {
print(object.var1);
}
}
void main() {
final object = ClassName();
}
请参阅此部分和以下部分