Streamに続いて、Java8で新搭載された機能がOptional です。
Javaではnullの処理をいちいちしなくてはいけないのがいろいろと面倒ですが、Optionalの機能をうまく使うことで可読性の高いコードを書くことができます。
私もまだ調査中なので本当に基本的な部分だけ紹介します。
Optionalとは?
Optionalとはnullかも知れない値をラップできる、オブジェクトです。
通常の処理
現状、Javaでは値にnullが入っているオブジェクトに対して処理をしようとするとExceptionが発生します。
1 2 3 |
String str = null; //NullPointerExceptionが発生 System.out.print(str.length()); |
これを防ぐために下記のようなチェック方法があります。
nullチェックその1
ifでチェック
1 2 3 4 |
String str = null; if (str != null) { System.out.print(str.length()); } |
この場合、何も出力されません。
nullチェックその2
例外を使ってキャッチする方法もあります。
1 2 3 4 5 6 7 |
String str = null; try { System.out.print(str.length()); } catch (NullPointerException e) { System.out.print(e.getMessage()); } |
nullと出力されます。
Optionalの使い方
Optionalはこのようにnullの可能性がある値をラップします。
1 2 3 4 5 6 7 |
String str = null; //Optional型の文字列 Optional<String> str1 = Optional.ofNullable(str); //ここではstr1がnullでないときに表示を行います。 if( str1.isPresent()){ System.out.print(str1.get()); } |
メソッドの説明ですが、
Optional.ofNullable()はnullかもしれない値を取得します。
isPresent()は存在チェックなのでbooleanを返します。
str1.get()は値を取得します。
今回の場合、一切出力はされません。(文字がある場合、表示されます。)
ラムダ式を使った使い方
なお、下記のようにラムダ式を使った表記も可能です。
1 |
str1.ifPresent(s -> System.out.print(s)); |
まだ全然調べられてないのでとりあえず今回はここまでにします。