Optionalのチェーン
ネストされたnullチェックをOptionalパイプラインに置き換える。
コード比較
✕ Java 8
String city = null;
if (user != null) {
Address addr = user.getAddress();
if (addr != null) {
city = addr.getCity();
}
}
if (city == null) city = "Unknown";
✓ Java 9+
String city = Optional.ofNullable(user)
.map(User::address)
.map(Address::city)
.orElse("Unknown");
このコードに問題がありますか? お知らせください。
モダンな方法が優れている理由
チェーン可能
各.map()ステップがnullを透過的に処理します。
線形な流れ
ネストされたifブロックではなく左から右に読めます。
NPE安全
各ステップでnullが処理されるのでクラッシュしません。
旧来のアプローチ
ネストされたnullチェック
モダンなアプローチ
Optionalパイプライン
JDKバージョン
9
難易度
初級
JDKサポート
Optionalのチェーン
利用可能
JDK 8以降(9以降で改善)
仕組み
Optional.map()はnullになりうる値をチェーンし、最初のnullで短絡します。orElse()でデフォルト値を提供します。ピラミッド状のnullチェックをなくします。
関連ドキュメント