![](/img/trans.png)
[英]What is Thread Safety and how const constructor and final members (Immutable class) achieve "Thread-safety" in Dart?
[英]How to set final/const properties in Dart constructor
我有一个具有不可变属性的类,int id。 如何将id的值传递给构造函数?
class Hey
{
var val;
final int id;
Hey(int id,var val)
{
this.id=id;
this.val=val;
}
}
void main()
{
Hey hey=new Hey(0,1);
}
hey.dart:10:10:错误:未找到Setter:'id'。 this.id = ID; ^^ hey.dart:10:10:错误:没有为类'嘿'定义setter'id'。 - '嘿'来自'hey.dart'。 尝试将名称更正为现有setter的名称,或者定义名为“id”的setter或字段。 this.id = ID; ^^
我认为const或final字段属性不需要setter。 API尚不清楚如何处理这个问题。
从Dart语言之旅 :
注意:实例变量可以是
final
但不是const
。 最终实例变量必须在构造函数体启动之前初始化 - 在变量声明,构造函数参数或构造函数的初始化列表中 。
初始化列表中的部分说:
除了调用超类构造函数之外,还可以在构造函数体运行之前初始化实例变量。 用逗号分隔初始化程序。
// Initializer list sets instance variables before // the constructor body runs. Point.fromJson(Map<String, num> json) : x = json['x'], y = json['y'] { print('In Point.fromJson(): ($x, $y)'); }
所以一般的方法是通过初始化列表。
如上所述,您还可以在变量声明处初始化:
class Foo {
final x = 42;
}
或者可以通过构造函数参数初始化它们:
class Foo {
final x;
Foo(this.x);
}
虽然那些其他方法可能并不总是适用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.