前回に引き続き Optional
を勉強しています。今回は
- get
- isPresent
- ifPresent
について勉強しました。
get
Optional がラップしている値を取り出します。
String s = "text";
Optional<String> opt = Optional.ofNullable(s);
System.out.println(opt.get());
// text
ただし、空の Optional の get
を呼び出すと例外を吐きます。
Optional<String> opt = Optional.empty();
System.out.println(opt.get());
// java.util.NoSuchElementException: No value present
isPresent
Optional が値を持っているかどうかを返します。値を持っていれば true
, 空の Optional であれば false
を返します。
String s = "text";
Optional<String> opt = Optional.ofNullable(s);
System.out.println(opt.isPresent() ? "Non-null" : "null");
// Non-null
Optional<String> opt = Optional.empty();
System.out.println(opt.isPresent() ? "Non-null" : "null");
// null
ifPresent
Optional が値を持っていた場合、引数に渡されたブロックを実行します。ブロックの引数は Optional でラップしている値になります。
String s = "text";
Optional<String> opt = Optional.ofNullable(s);
opt.ifPresent(s2 -> System.out.println(s2));
// text
空の Optional の場合はブロックは実行されません。
Optional<String> opt = Optional.empty();
opt.ifPresent(s2 -> System.out.println(s2));
// 何もなし
まとめ
get
と isPresent
を組み合わせると↓のようなよくあるコードが書けますね。
String s = opt.isPresent() ? opt.get() : "default text";
この場合は Optional#orElse
というメソッドを使うともっと簡潔になります。それはまた次回に書きたいと思います。
追記:さらに続きを書きました。