Dom*_*ino 1 getter factory final dart
如果你能弄清楚如何重命名这个问题,我愿意接受建议。
在 Dart 语言中,可以编写一个带有 final 字段的类。这些是只能在构造函数体运行之前设置的字段。这可以在声明时(通常用于类内的静态常量),在声明构造函数或使用this.field
速记时的初始化列表语法中:
class NumBox{
final num value;
NumBox(this.value);
}
Run Code Online (Sandbox Code Playgroud)
假设我实际上需要对实例创建进行一些处理,并且不能只是在构造函数之前初始化该字段。我可以切换到使用带有 getter 的私有非最终字段:
class NumBox{
num _value;
NumBox(num v) {
_value = someComplexOperation(v);
}
num get value => _value;
}
Run Code Online (Sandbox Code Playgroud)
或者我可以使用工厂构造函数获得类似的行为:
class NumBox{
final num value;
factory NumBox(num v) {
return new NumBox._internal(someComplexOperation(v));
};
NumBox._internal(this.value);
}
Run Code Online (Sandbox Code Playgroud)
几年前我尝试学习 Dart 时遇到了类似的问题,现在我有更多的包袱,我仍然不知道。什么是更聪明的方法来做到这一点?
工厂构造函数是一种很好的方法,它允许不受限制地预先计算任何值,然后将这些值传递给普通构造函数以转发到最终字段。
另一种方法是初始化列表,它在构造函数体之前执行,因此允许初始化最终字段:
class NumBox{
final num value;
NumBox(num v) : value = someComplexOperation(v)
}
Run Code Online (Sandbox Code Playgroud)
在初始化列表中,您不允许读取,this
因为实例尚未完全初始化。