Java8のOptionalクラスの使い方

Java8のOptionalクラスの使い方

Java8からjava.util.Optionalクラスが追加されました。

nullチェックをしてくれるクラスです。

Optional.ofNullable

以下のように値をOptional.ofNullableメソッドでラップします。get()で値を取得します。

ofNullableにnullをセットすると、get()部分でNoSuchElementExceptionエラーとなります。

get()を使う場合はisPresent()メソッドを使用してnullでない場合のみget()できるようにします。

ifPresent

nullチェックしているのと同じなので、ifPresentメソッドと言う便利なメソッドもあります。これはnull出ない場合のみ処理を実行してくれます。

orElse

get()で値を取得した場合、nullを考慮しないといけませんでした。

ifPresentを使えばnull出ない場合のみ処理をしてくれるのですが、orElseメソッドですとnullの場合、第一引数で指定された値を返してくれます。

結果は以下のようになります。

ofNullableにnullを指定して、orElseに値を指定するとその値が返ります。

以下、例です。

結果は以下のようになります。

orElseGet

orElse()と同様にorElseGet()を指定して値を取得することができます。

orElseGetは以下のようにSupplier型のラムダ式で渡します。

orElseGetのようにデフォルト値をラムダ式で記述することによりnullだった場合のみ処理されます。これがorElseとorElseGetの違いです。

以下、例です。

結果は以下のようになります。

orElseThrow

値がnullの場合、第一引数で指定した例外をスローします。

package jp.co.confrage;
import java.util.Optional;
public class OptionalSample {
public static void main(String[] args) {
Integer max = null;
Optional<Integer> nullableMax = Optional.ofNullable(max);
nullableMax.orElseThrow(RuntimeException::new); // 例外スローする
}
}

view raw
OptionalSample.java
hosted with ❤ by GitHub

if文を消す

OptionalクラスのorElseを使えば今までif文でnullチェックをしていた箇所を削除することが出来ます。

package jp.co.confrage;
import java.util.Objects;
import java.util.Optional;
public class OptionalSample {
public static void main(String[] args) {
Integer max = Integer.valueOf(1);
if (Objects.isNull(max)) {
max = Integer.valueOf(2);
}
System.out.println(max); // 1
// ↓ if文消す
Optional<Integer> maxtemp = Optional.ofNullable(Integer.valueOf(1));
max = maxtemp.orElse(Integer.valueOf(2));
System.out.println(max); // 1
}
}

view raw
Optional.java
hosted with ❤ by GitHub

  • このエントリーをはてなブックマークに追加
  • Evernoteに保存Evernoteに保存

コメントをどうぞ

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

CAPTCHA