#はじめに
Optionalについて自分なりの理解を備忘録として執筆します。
#Optionalとは
値をラップしてその値がnullである可能性を表現するクラス。
NullPointerExceptionを防ぐことができる。
#Optionalを使う理由
nullである可能性のあるメソッドを呼ぶ場合、事前にnullかどうかのチェックを実装する必要がある。
しかし、実装を忘れてしまう可能性がある。
実装を忘れることを防止するためにOptionalが利用される。
#ソースコードで確認
ofNullableメソッドを利用して、Optionalが型のオブジェクトを作成する。
If文の中でisPresent関数を利用して、値が存在しているときのみlengthメソッドを実行している。
この時、変数strの中身はnullであるため実行してもコンソール上にはなにも表示されない。
String str=null;
Optional<String>strOpt=Optional.ofNullable(str);
if(strOpt.isPresent()) {
String message=strOpt.get();
System.out.println(message.length());
}
if文を利用しないでnullチェックする方法はラムダ式を用いて下記のように記載することもできる。
strOpt.ifPresent(v->System.out.println(v.length()));
#値として受け取る場合
map関数を利用する。
mapメソッドの戻り値は、ラムダ式の戻り値をラップしたOptionalとなる。(この場合はInteger型のOptionalが返ってくる)
strOptの値が存在しない場合、値を持たないOptionalオブジェクトが返ってくる。
Optional<String>strOpt=Optional.ofNullable(str);
Optional<Integer>lengthOpt=strOpt.map(v->v.length());