Java8のOptionalを試してみた1
Java8のOptionalでは値が無い場合は
nullではなく、emptyというオブジェクトが返ってくるらしい。
以下、ソースコード
JavaTrial/OptionalTest.java at master · sndstudy/JavaTrial · GitHub
package test.java; import java.util.Optional; /** * Optionalのテスト * */ public class OptionalTest { public static void main(String[] args) { /********************************/ /* */ /*nullの判定(Optional未使用) */ /* */ /********************************/ String hoge = "hoge"; if(null != hoge){ System.out.println(hoge); } /********************************/ /* */ /*nullの判定(Optional使用) */ /* */ /********************************/ //値をラッパーする Optional<String> hogeOpt = Optional.ofNullable(hoge); //isPresent()は値がある場合はtrue //nullの場合はfalseを返す if(hogeOpt.isPresent()){ //get()で値を取得する System.out.println(hogeOpt.orElse(hogeOpt.get())); } /********************************/ /* */ /*nullの判定(ラムダ式使用) */ /* */ /********************************/ //ifPresent()はnull以外の場合に処理を実行する hogeOpt.ifPresent(str -> System.out.println(str)); } }
今までの値のnull判定はこうだった。
/********************************/ /* */ /*nullの判定(Optional未使用) */ /* */ /********************************/ String hoge = "hoge"; if(null != hoge){ System.out.println(hoge); }
Optionalではこうなる
/********************************/ /* */ /*nullの判定(Optional使用) */ /* */ /********************************/ //値をラッパーする Optional<String> hogeOpt = Optional.ofNullable(hoge); //isPresent()は値がある場合はtrue //nullの場合はfalseを返す if(hogeOpt.isPresent()){ //get()で値を取得する System.out.println(hogeOpt.orElse(hogeOpt.get())); }
ソースコード量はあまり変わらないが、Optionalを使用することで
"この値は空の可能性がある"ということを明示的にすることができるみたい。
ラムダ式で書くとこうスッキリする。
/********************************/ /* */ /*nullの判定(ラムダ式使用) */ /* */ /********************************/ //ifPresent()はnull以外の場合に処理を実行する hogeOpt.ifPresent(str -> System.out.println(str));
Java8で追加されたOptionalを使いこなせば、
NullPointerExceptionが起きにくいコードが書けるようになるかも。