【備忘録】JavaのOptionalについて


はじめに

Optionalについて自分なりの理解を備忘録として執筆します。

Optionalとは

値をラップしてその値がnullである可能性を表現するクラス。
NullPointerExceptionを防ぐことができる。

Optionalを使う理由

nullである可能性のあるメソッドを呼ぶ場合、事前にnullかどうかのチェックを実装する必要がある。
しかし、実装を忘れてしまう可能性がある。
実装を忘れることを防止するためにOptionalが利用される。

ソースコードで確認

ofNullableメソッドを利用して、Optionalが型のオブジェクトを作成する。
If文の中でisPresent関数を利用して、値が存在しているときのみlengthメソッドを実行している。
この時、変数strの中身はnullであるため実行してもコンソール上にはなにも表示されない。

java
        String str=null;
        Optional<String>strOpt=Optional.ofNullable(str);

        if(strOpt.isPresent()) {
            String message=strOpt.get();
            System.out.println(message.length());
        }

if文を利用しないでnullチェックする方法はラムダ式を用いて下記のように記載することもできる。

java
        strOpt.ifPresent(v->System.out.println(v.length()));

値として受け取る場合

map関数を利用する。
mapメソッドの戻り値は、ラムダ式の戻り値をラップしたOptionalとなる。(この場合はInteger型のOptionalが返ってくる)
strOptの値が存在しない場合、値を持たないOptionalオブジェクトが返ってくる。

java
Optional<String>strOpt=Optional.ofNullable(str);
Optional<Integer>lengthOpt=strOpt.map(v->v.length());

参考