null 安全性を有効にして一部のコードを Dart 2.12 に移行しようとしていますが、遅延ロード/キャッシュされた値を持つメソッドを移行する良い方法を見つけるのに問題があります。
MyObject
getValue() の戻り値の型を からに変更しない限り、Dart 2.12 は次のコードをコンパイルしませんMyObject?
。しかしgetValue()
、決して戻りませんnull
。
class MyObject {
// ...
}
MyObject? _cachedValue;
MyObject getValue() {
if (_cachedValue == null) {
_cachedValue = MyObject();
// some heavy computing...
}
return _cachedValue;
}
更新 2021-03-17
stephenの回答とMattiaのコメントに基づいて、私は現在使用しています:
class MyObject {
// ...
}
MyObject _computeValue() {
MyObject obj = MyObject();
// some heavy computing...
return obj;
}
late final MyObject cachedValue = _computeValue();