Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Dart中的“this”初始化最终变量_Dart_Final - Fatal编程技术网

用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;}}}}哦,那太棒了!