在 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);
  }
}