Java8のOptionalクラスの使い方
Java8からjava.util.Optionalクラスが追加されました。
nullチェックをしてくれるクラスです。
Optional.ofNullable
以下のように値をOptional.ofNullableメソッドでラップします。get()で値を取得します。
import java.util.Optional; public class Sample { public static void main(String[] args) { Optional<Integer> opt = Optional.ofNullable(2); System.out.println(opt.get()); } }
ofNullableにnullをセットすると、get()部分でNoSuchElementExceptionエラーとなります。
get()を使う場合はisPresent()メソッドを使用してnullでない場合のみget()できるようにします。
import java.util.Optional; public class Sample { public static void main(String[] args) { Optional<Integer> opt = Optional.ofNullable(2); if (opt.isPresent()) { System.out.println(opt.get()); } } }
ifPresent
nullチェックしているのと同じなので、ifPresentメソッドと言う便利なメソッドもあります。これはnull出ない場合のみ処理を実行してくれます。
import java.util.Optional; public class Sample { public static void main(String[] args) { Optional<Integer> opt = Optional.ofNullable(2); opt.ifPresent(e -> System.out.println(e)); // Consumerインタフェース } }
orElse
get()で値を取得した場合、nullを考慮しないといけませんでした。
ifPresentを使えばnull出ない場合のみ処理をしてくれるのですが、orElseメソッドですとnullの場合、第一引数で指定された値を返してくれます。
import java.util.Optional; public class Sample { public static void main(String[] args) { Optional<Integer> opt = Optional.ofNullable(2); System.out.println(opt.orElse(3)); } }
結果は以下のようになります。
2
ofNullableにnullを指定して、orElseに値を指定するとその値が返ります。
以下、例です。
import java.util.Optional; public class Sample { public static void main(String[] args) { Optional<Integer> opt = Optional.ofNullable(null); System.out.println(opt.orElse(2)); } }
結果は以下のようになります。
2
orElseGet
orElse()と同様にorElseGet()を指定して値を取得することができます。
orElseGetは以下のようにSupplier型のラムダ式で渡します。
opt.orElseGet(() -> new Integer(3)); // Supplier
orElseGetのようにデフォルト値をラムダ式で記述することによりnullだった場合のみ処理されます。これがorElseとorElseGetの違いです。
以下、例です。
import java.util.Optional; public class Sample { public static void main(String[] args) { Optional<Integer> opt = Optional.ofNullable(null); System.out.println(opt.orElseGet(() -> new Integer(3))); } }
結果は以下のようになります。
3
orElseThrow
値がnullの場合、第一引数で指定した例外をスローします。
package jp.co.confrage; import java.util.Optional; public class OptionalSample { public static void main(String[] args) { Integer max = null; Optional<Integer> nullableMax = Optional.ofNullable(max); nullableMax.orElseThrow(RuntimeException::new); // 例外スローする } }
if文を消す
OptionalクラスのorElseを使えば今までif文でnullチェックをしていた箇所を削除することが出来ます。
package jp.co.confrage; import java.util.Objects; import java.util.Optional; public class OptionalSample { public static void main(String[] args) { Integer max = Integer.valueOf(1); if (Objects.isNull(max)) { max = Integer.valueOf(2); } System.out.println(max); // 1 // ↓ if文消す Optional<Integer> maxtemp = Optional.ofNullable(Integer.valueOf(1)); max = maxtemp.orElse(Integer.valueOf(2)); System.out.println(max); // 1 } }

KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^
資格:少額短期保険募集人,FP3級,宅建士
コメント