[Java] 今さら聞けない Optional その2

前回に引き続き 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));

// 何もなし

まとめ

getisPresent を組み合わせると↓のようなよくあるコードが書けますね。

String s = opt.isPresent() ? opt.get() : "default text";

この場合は Optional#orElse というメソッドを使うともっと簡潔になります。それはまた次回に書きたいと思います。

追記:さらに続きを書きました。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です