Optionalについて調べてみた その1
【概要】
Java8でOptionalクラスについて調べてみました。
OptionalはNullを安全に扱うためのクラスです。
JavaではNullチェックを値を設定して・・・
と言ったコード良く書くと思います。
Optionalはそういったコードを少し簡単に書くためのクラスです。
【Optionalオブジェクトの生成】
public static void main(final String[] args) { final Optional<String> optVal = Optional.of("Test"); final Optional<String> emptyVal = Optional.empty(); final Optional<String> nullVal = Optional.ofNullable(null); }
Optinalを作るにはOptionalクラスにある
ofメソッド、emptyメソッド、ofNullableメソッドの3つを使います。
ofメソッドを使う場合、Null以外の値を指定します。
Nullを指定した場合は例外がスローされます。
emptyメソッドを使った場合、Optionalオブジェクトの内部で
保持している値にはNullが設定されます。
ofNullableメソッドはofメソッドと同様ですが、
メソッド名どおりNullの場合でも例外はスローされません。
【値を取得する】
生成したオブジェクトから値を取得してみます。
[ソースコード]
Nullだったらデフォルト値を取得する
orElseメソッドを使って値を取得してみます。
public static void main(final String[] args) { final Optional<String> optVal = Optional.of("Test"); final Optional<String> emptyVal = Optional.empty(); final Optional<String> nullVal = Optional.ofNullable(null); System.out.println("optVal#orElse : " + optVal.orElse("Default!")); System.out.println("emptyVal#orElse : " + emptyVal.orElse("Default!")); System.out.println("nullVal#orElse : " + nullVal.orElse("Default!")); }
orElseのパラメータにはデフォルト値を設定します。
[出力結果]
optVal#orElse : Test emptyVal#orElse : Default! nullVal#orElse : Default!
emptyメソッドで生成したオブジェクト、
ofNullableメソッドでNullを指定して生成したオブジェクトは
デフォルト値が設定されているのがわかります。
【まとめ】
Optional#orElseを使うとNullチェックのコードが
省略できるようになりました。
大きな違いではありませんが、
API側がNullではないことを保障してくれるというのは
無視できない違いかなと思います。