仕事で Java を使う機会がちょいちょい・・・でも Java をほとんど書いたことがなかったので色んな壁に突き当たってます。
その中で Optional
というものを知ったのでメモ。
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);
追記:続きを書きました。