用Dart中的“this”初始化最终变量
我有一门课是这样的:用Dart中的“this”初始化最终变量,dart,final,Dart,Final,我有一门课是这样的: class A extends B { final Property<bool> property = Property<bool>(this); } class Property<T> { Property(this.b); final B b; } 但我也犯了同样的错误 唯一有效的方法是: class A extends B { Property<bool> property; A() { p
class A extends B {
final Property<bool> property = Property<bool>(this);
}
class Property<T> {
Property(this.b);
final B b;
}
但我也犯了同样的错误
唯一有效的方法是:
class A extends B {
Property<bool> property;
A() {
property = Property<bool>(this);
}
}
这需要我删除最后的变量声明,这是我不想做的
如何在Dart中初始化需要引用对象本身的最终变量?您不能在任何初始值设定项中引用该变量,因为该变量本身尚未初始化,因此无法将属性设置为最终变量
如果您只是试图阻止从实例外部修改属性的值,那么可以使用私有成员并提供getter来防止修改。以您的示例为例,它看起来是这样的:
class A extends B {
final Property<bool> property = Property<bool>(this);
}
class Property<T> {
Property(this.b);
final B b;
}
A类延伸至B类{
//由于没有属性设置器,我们实际上不允许
//财产的外部修改。
属性get Property=>\u属性;
财产(不动产);;
A{
属性=属性这一点;
}
}
您不能在任何初始值设定项中引用它,因为它本身尚未初始化,所以您无法将属性设置为final
如果您只是试图阻止从实例外部修改属性的值,那么可以使用私有成员并提供getter来防止修改。以您的示例为例,它看起来是这样的:
class A extends B {
final Property<bool> property = Property<bool>(this);
}
class Property<T> {
Property(this.b);
final B b;
}
A类延伸至B类{
//由于没有属性设置器,我们实际上不允许
//财产的外部修改。
属性get Property=>\u属性;
财产(不动产);;
A{
属性=属性这一点;
}
}
是的,只是这种锅炉板正是我通过创建属性试图避免的,它是一个封装getter和setter并同时提供更改通知的类。是的,这是完全可以理解的。然而,在不久的将来,当语言默认为non-nullable时,您将能够处理这个问题。在这种情况下,我认为下面的代码是有效的:类A{late final Property;A{Property=Propertythis;}}}}哦,那太棒了!是的,只是这种锅炉板正是我通过创建属性试图避免的,它是一个封装getter和setter并同时提供更改通知的类。是的,这是完全可以理解的。然而,在不久的将来,当语言默认为non-nullable时,您将能够处理这个问题。在这种情况下,我认为下面的代码是有效的:类A{late final Property;A{Property=Propertythis;}}}}哦,那太棒了!