gpt4 book ai didi

dart - 在 Dart 中使用 "this"初始化最终变量

转载 作者:行者123 更新时间:2023-12-03 04:26:31 24 4
gpt4 key购买 nike

我有这样的课:

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变量声明,这是我不想要的。

如何初始化 final Dart 中需要引用对象本身的变量?

最佳答案

你不能引用 this在任何初始化器中为 this自己还没有初始化,所以你不能设置Property<bool> property成为最终的。

如果您只是想阻止修改 property 的值从实异常(exception)部,您可以使用私有(private)成员并提供 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);
}
}

关于dart - 在 Dart 中使用 "this"初始化最终变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59449666/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com