Ste*_*art 5 constructor final properties dart
我有一个具有不可变属性 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);
}
Run Code Online (Sandbox Code Playgroud)
hey.dart:10:10: 错误:找不到 Setter:'id'。this.id=id; ^^ hey.dart:10:10: 错误:没有为“Hey”类定义设置器“id”。- '嘿' 来自'hey.dart'。尝试将名称更正为现有 setter 的名称,或定义名为 'id' 的 setter 或字段。this.id=id; ^^
我认为 const 或 final 字段属性不需要设置器。API 不清楚如何处理这个问题。
来自Dart 语言之旅:
\n\n\n\n\n注意:实例变量可以是,
\nfinal但不能是const。最终实例变量必须在构造函数体在变量声明处启动 \xe2\x80\x94 之前通过构造函数参数或在构造函数\xe2\x80\x99s初始值设定项列表中进行初始化。
关于初始化列表的部分说:
\n\n\n\n\n除了调用超类构造函数之外,您还可以在构造函数主体运行之前初始化实例变量。用逗号分隔初始值设定项。
\n\nRun Code Online (Sandbox Code Playgroud)\n// Initializer list sets instance variables before\n// the constructor body runs.\nPoint.fromJson(Map<String, num> json)\n : x = json[\'x\'],\n y = json[\'y\'] {\n print(\'In Point.fromJson(): ($x, $y)\');\n}\n
所以一般的方式就是通过初始化列表。
\n\n如上所述,您还可以在变量声明时进行初始化:
\n\nclass Foo {\n final x = 42;\n}\nRun Code Online (Sandbox Code Playgroud)\n\n或者可以通过构造函数参数初始化它们:
\n\nclass Foo {\n final x;\n\n Foo(this.x);\n}\nRun Code Online (Sandbox Code Playgroud)\n\n尽管这些其他方法可能并不总是适用。
\n