dart - 镖。后期初始化最终变量
问题描述
有没有办法后期初始化最终变量。问题是使用类的入口点初始化了许多值,这不是构造函数。因此,它们现在不能是最终的。但在特定类的范围内,它们不会改变。例如。
Controller controller;
double width;
void setup(final itemWidth) {
controller = MyController();
width = itemWidth;
}
有可能吗?现在我只看到解决方案作为注释。你可能认为这是为了视觉效果。但实际上它有助于避免在测试期间出现不可预测的流量。
解决方案
现在可以延迟初始化变量。有关更多信息,请参阅Dart 的文档。下面的文字是从Dart 的文档中复制而来的:
后期最终变量
您还可以将 late 与 final 结合起来:
// Using null safety:
class Coffee {
late final String _temperature;
void heat() { _temperature = 'hot'; }
void chill() { _temperature = 'iced'; }
String serve() => _temperature + ' coffee';
}
与普通的 final 字段不同,您不必在其声明或构造函数初始化列表中初始化该字段。您可以稍后在运行时分配给它。但是您只能分配给它一次,并且在运行时检查该事实。如果你尝试多次分配给它——比如调用 bothheat()
和chill()
here——第二个分配会抛出一个异常。这是对最终初始化并且之后不可变的状态进行建模的好方法。
推荐阅读
- sql - 计数函数sql
- address-sanitizer - 发生未知地址上的 SEGV 时,如何继续执行地址清理程序?
- kubernetes - kubernetes-fabric8 watch API中的Action ADD是什么意思?
- javascript - 删除 react-dnd 中的可拖动对象
- javascript - 在javascript中将二进制数据编码为字符串
- python - 如何使用 Selenium webdriver 和 Python 抓取所有搜索结果
- tensorflow - tf.profiler 的峰值内存使用量比 nvidia-smi 多得多?
- java - bean xml中的Spring配置方法引用
- java - 使用 OpenId Connect 的多个 Liberty 服务器 SSO
- image-processing - Tensorflow 2.0 sobel_edges 图像格式?