[Java] if(hoge != null) {...}の代わりにOptionalを使う
いまいちOptionalの使いドコロがわかっていなかったのですが、こういうことだったのかなぁと理解しました。
変数hoge
がnull
でないときのみ、hoge
のメソッドを実行したい
従来のやりかた
if (hoge != null) {
hoge.fuga();
}
Optional
を使ったやりかた
Optional
.ofNullable(hoge)
.ifPresent(o -> o.fuga());
どっちのほうが見やすいかな?
変数hoge
がnull
でないときは、hoge
のメソッド実行結果を返す
従来のやりかた
fugo = hoge != null ? hoge.fugo() : null;
Optional
を使ったやりかた
fugo = Optional
.ofNullable(hoge)
.map(o -> o.fugo()) // Optional<?>が返ってくるので、
.orElse(null); // orElseで値そのものか、デフォルト値(ここではnull)を返すようにする
これくらいだと、3項演算子のほうが見やすいかな?
変数hoge
がnull
でないときは、hoge
のメソッドを呼び、メソッドの結果がnull
でないときは、さらにメソッドを呼ぶ
何書いてあるかわかんないですね。コード見てください。
従来のやりかた
instant = null;
if (hoge != null) {
date = hoge.getDate();
if (date != null) {
instant = date.toInstant();
}
}
あるいは、こんなんどうでしょう?
instant = hoge != null
? (hoge.getDate() != null
? hoge.getDate().toInstant()
: null)
: null;
Optional
を使ったやりかた
instant = Optional
.ofNullable(hoge)
.map(o -> o.getDate())
.map(d -> d.toInstant())
.orElse(null);
どっちのほうが見やすいかな?