在 Dart 中用 "this" 初始化最终变量
Initialize a final variable with "this" in Dart
我有一个 class 这样的:
class A extends B {
final Property<bool> property = Property<bool>(this);
}
class Property<T> {
Property(this.b);
final B b;
}
但我在 this
上收到错误消息:
Invalid reference to 'this' expression.
我相信我当时无法访问 this
,可能是因为对象引用尚未准备好。
所以我尝试了其他形式的初始化该变量,例如:
class A extends B {
final Property<bool> property;
A() : property = Property<bool>(this);
}
但是我得到了同样的错误。
唯一有效的是:
class A extends B {
Property<bool> property;
A() {
property = Property<bool>(this);
}
}
这需要我删除 final
变量声明,这是我不想要的。
如何在 Dart 中初始化需要引用对象本身的 final
变量?
您不能在任何初始化程序中引用 this
,因为 this
本身尚未初始化,因此您无法将 Property<bool> property
设置为最终的。
如果您只是想防止从实例外部修改 property
的值,您可以使用私有成员并提供 getter 来防止修改。根据您的示例,它看起来像这样:
class A extends B {
// Since there's no property setter, we've effectively disallowed
// outside modification of property.
Property<bool> get property => _property;
Property<bool> _property;
A() {
property = Property<bool>(this);
}
}
我有一个 class 这样的:
class A extends B {
final Property<bool> property = Property<bool>(this);
}
class Property<T> {
Property(this.b);
final B b;
}
但我在 this
上收到错误消息:
Invalid reference to 'this' expression.
我相信我当时无法访问 this
,可能是因为对象引用尚未准备好。
所以我尝试了其他形式的初始化该变量,例如:
class A extends B {
final Property<bool> property;
A() : property = Property<bool>(this);
}
但是我得到了同样的错误。
唯一有效的是:
class A extends B {
Property<bool> property;
A() {
property = Property<bool>(this);
}
}
这需要我删除 final
变量声明,这是我不想要的。
如何在 Dart 中初始化需要引用对象本身的 final
变量?
您不能在任何初始化程序中引用 this
,因为 this
本身尚未初始化,因此您无法将 Property<bool> property
设置为最终的。
如果您只是想防止从实例外部修改 property
的值,您可以使用私有成员并提供 getter 来防止修改。根据您的示例,它看起来像这样:
class A extends B {
// Since there's no property setter, we've effectively disallowed
// outside modification of property.
Property<bool> get property => _property;
Property<bool> _property;
A() {
property = Property<bool>(this);
}
}