Java8のOptional

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

nullチェックをしてくれるクラスって感じでしょうか。

以下のように値をラップします。get()で値を取得します。

import java.util.Optional;
public class Sample {
  public static void main(String[] args) {
    Optional<Integer> opt = Optional.ofNullable(2);
    System.out.println(opt.get());
  }
}

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

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

import java.util.Optional;
public class Sample {
  public static void main(String[] args) {
    Optional<Integer> opt = Optional.ofNullable(2);
    if (opt.isPresent()) {
      System.out.println(opt.get());
    }
  }
}

これだとnullチェックしているようなのでifPresentメソッドと言う便利なメソッドもあります。

import java.util.Optional;
public class Sample {
  public static void main(String[] args) {
    Optional<Integer> opt = Optional.ofNullable(2);
    opt.ifPresent(e -> System.out.println(e));
  }
}

・orElseで値を取得する

今までget()で値を取得していましたがifPresent()やなにかとnullを考慮しないといけませんでした。

orElseの第一引数にはnullだった場合のデフォルト値を指定するため、nullだった場合は第一引数が取得されます。

import java.util.Optional;
public class Sample {
  public static void main(String[] args) {
    Optional<Integer> opt = Optional.ofNullable(2);
    System.out.println(opt.orElse(3));
  }
}

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

2

ofNullableにnullを指定して、orElseにもnullを指定すると、nullが指定されますがエラーは発生しません。

以下、例です。

import java.util.Optional;
public class Sample {
  public static void main(String[] args) {
    Optional<Integer> opt = Optional.ofNullable(null);
    System.out.println(opt.orElse(null));
  }
}

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

null

・orElseGetで値を取得する

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

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

opt.orElseGet(() -> new Integer(3));

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

以下、例です。

import java.util.Optional;
public class Sample {
  public static void main(String[] args) {
    Optional<Integer> opt = Optional.ofNullable(null);
    System.out.println(opt.orElseGet(() -> new Integer(3)));
  }
}

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

3

スポンサーリンク
  • このエントリーをはてなブックマークに追加
スポンサーリンク

コメントをどうぞ

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

CAPTCHA