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

仕事で Java を使う機会がちょいちょい・・・でも Java をほとんど書いたことがなかったので色んな壁に突き当たってます。

その中で Optional というものを知ったのでメモ。

Optional ってなに

java.util.Optional

null以外の値が含まれている場合も含まれていない場合もあるコンテナ・オブジェクトです。値が存在する場合、isPresent()はtrueを返し、get()は値を返します。

https://docs.oracle.com/javase/jp/8/docs/api/java/util/Optional.html

なるほどふわっとした理解を得た。あとは触って確かめましょう。

Optional を生成する

以下の static なメソッドを使って生成出来ます。

  • of
  • empty
  • ofNullable

以降のサンプルコードは↓のようなクラスとメソッドが前提です。

import java.util.Optional;

public class Test {
    public static void main(String[] args) {
        // ここがサンプル
    }
}

of

値から Optional を生成するメソッドです。最も基本になるメソッドと思われます。

String s = "test";
Optional<String> opt = Optional.of(s);
System.out.println(opt);

// Optional[test]

ただし of に null を渡すと NullPointerException を吐きます。

String s = null;
Optional<String> opt = Optional.of(s);

// Exception in thread "main" java.lang.NullPointerException

empty

空の Optional を生成するメソッドです。

Optional<String> opt = Optional.empty();
System.out.println(opt);

// Optional.empty

ofNullable

引数が 非null ならその値の Optional を、null なら空の Optional を返します。

String s = null;
Optional<String> opt = Optional.ofNullable(s);
System.out.println(opt);

// Optional.empty

結局どれ使えばいいの

ofNullable を使えば間違いないですかね…上の ofNullable のサンプルコードは以下のコードと同じです。

Optional<String> opt = s == null
    ? Optional.empty()
    : Optional.of(s);

// 同じ
// Optional<String> opt = Optional.ofNullable(s);

追記:続きを書きました。

コメントを残す

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