Optionalについて調べてみた その1

【前提条件】

[環境]
[参考資料]

Java8 APIドキュメント
Java Platform SE 8

【概要】

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ではないことを保障してくれるというのは
無視できない違いかなと思います。