Caution
お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。
Optional.of() / isPresent() / orElse() / orElseThrow()
『Optional』は null を安全に扱うためのラッパークラスです(Java 8+)。値が存在する場合も存在しない場合も統一された方法で処理でき、NullPointerException のリスクを減らすことができます。ストリームの終端操作(『findFirst()』など)の戻り値としてもよく使われます。
構文
// 値を持つ Optional を作成します(null は不可)。 Optional<型> opt = Optional.of(値); // null も許容する Optional を作成します。 Optional<型> opt = Optional.ofNullable(値またはnull); // 空の Optional を作成します。 Optional<型> opt = Optional.empty(); // 値が存在するか確認します。 opt.isPresent(); // 値を取得します(存在しない場合は例外)。 opt.get(); // 値が存在しない場合のデフォルト値を指定します。 opt.orElse(デフォルト値);
メソッド一覧
| メソッド | 概要 |
|---|---|
| Optional.of(T value) | 値を持つ Optional を作成します。null を渡すと NullPointerException がスローされます。 |
| Optional.ofNullable(T value) | null も許容する Optional を作成します。null の場合は空の Optional になります。 |
| Optional.empty() | 空の Optional を作成します。 |
| isPresent() | 値が存在するか確認し、boolean 型で返します。 |
| get() | 値を取得します。存在しない場合は NoSuchElementException がスローされます。 |
| orElse(T other) | 値が存在すればその値を、存在しなければ指定したデフォルト値を返します。 |
| map(Function) | 値が存在する場合に変換処理を行い、新しい Optional を返します。 |
| filter(Predicate) | 値が条件を満たす場合はその Optional を、満たさない場合は空の Optional を返します。 |
サンプルコード
import java.util.Optional;
// 値を持つ Optional を作成します。
Optional<String> opt = Optional.of("Hello");
System.out.println(opt.isPresent()); // 『true』と出力されます。
System.out.println(opt.get()); // 『Hello』と出力されます。
// null を許容する Optional を作成します。
String nullValue = null;
Optional<String> optNull = Optional.ofNullable(nullValue);
System.out.println(optNull.isPresent()); // 『false』と出力されます。
// orElse でデフォルト値を指定します。
String result = optNull.orElse("デフォルト");
System.out.println(result); // 『デフォルト』と出力されます。
// map で変換します(値が存在する場合のみ実行)。
Optional<Integer> length = opt.map(String::length);
System.out.println(length.orElse(0)); // 『5』と出力されます。
// filter で条件を絞り込みます。
Optional<String> filtered = opt.filter(s -> s.startsWith("H"));
System.out.println(filtered.isPresent()); // 『true』と出力されます。
// ifPresent で値が存在する場合だけ処理します。
opt.ifPresent(s -> System.out.println("値: " + s)); // 『値: Hello』と出力されます。
概要
『Optional』は戻り値が存在しない可能性があることを型で明示し、呼び出し元に null チェックを促します。フィールド変数や引数に Optional を使うことは推奨されておらず、主にメソッドの戻り値として使用してください。
Java 11以降は『isEmpty()』(isPresent() の逆)、Java 9以降は『ifPresentOrElse()』(値がない場合の処理も書ける)など便利なメソッドが追加されています。opt.get() の直接呼び出しは避け、『orElse()』や『ifPresent()』を使う習慣をつけましょう。
ストリームでの検索操作については『findFirst() / anyMatch() / allMatch()』を参照してください。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。