Optional.or()によるフォールバック
ネストされたチェックなしでOptionalのフォールバックを連鎖する。
コード比較
✕ Java 8
Optional<Config> cfg = primary();
if (!cfg.isPresent()) {
cfg = secondary();
}
if (!cfg.isPresent()) {
cfg = defaults();
}
✓ Java 9+
Optional<Config> cfg = primary()
.or(this::secondary)
.or(this::defaults);
このコードに問題がありますか? お知らせください。
モダンな方法が優れている理由
連鎖可能
読みやすいパイプラインでフォールバックを積み重ねます。
遅延評価
フォールバックサプライヤは必要な場合のみ実行されます。
宣言的
「プライマリを試し、次にセカンダリ、次にデフォルト」と読めます。
旧来のアプローチ
ネストされたフォールバック
モダンなアプローチ
.or()チェーン
JDKバージョン
9
難易度
中級
JDKサポート
Optional.or()によるフォールバック
利用可能
JDK 9(2017年9月)以降、広く利用可能
仕組み
Optional.or()は値が存在する場合は元のOptionalを返し、そうでない場合はサプライヤを評価して代替のOptionalを取得します。サプライヤは遅延評価され、必要なときのみ呼び出されます。
関連ドキュメント