我正在尝试将一些代码迁移到启用 null 安全性的 Dart 2.12,但是在找到一种使用延迟加载/缓存值迁移方法的好方法时遇到了问题。
Dart 2.12 不会编译以下代码,除非我将 getValue() 的返回类型从MyObject
更改为MyObject?
。然而getValue()
永远不会回来null
。
class MyObject {
// ...
}
MyObject? _cachedValue;
MyObject getValue() {
if (_cachedValue == null) {
_cachedValue = MyObject();
// some heavy computing...
}
return _cachedValue;
}
2021-03-17 更新
class MyObject {
// ...
}
MyObject _computeValue() {
MyObject obj = MyObject();
// some heavy computing...
return obj;
}
late final MyObject cachedValue = _computeValue();