Java 8 Optional クラス
Optional クラスは null を許容するコンテナオブジェクトです。値が存在する場合 isPresent() メソッドは true を返し、get() メソッドを呼び出すとそのオブジェクトを返します。
Optional はコンテナです。型 T の値を保持するか、単に null を保持することができます。Optional は便利なメソッドを多数提供するため、明示的に null チェックを行う必要がありません。
Optional クラスの導入により、NullPointerException をうまく解決できます。
クラス宣言
以下はjava.util.Optional<T>クラスの宣言です:
クラスメソッド
| 番号 | メソッド & 説明 |
|---|---|
| 1 | static <T> Optional<T> empty()
空の Optional インスタンスを返します。 |
| 2 | boolean equals(Object obj)
他のオブジェクトが Optional と等しいかどうかを判定します。 |
| 3 | Optional<T> filter(Predicate<? super <T> predicate)
値が存在し、その値が指定された predicate に一致する場合は、その値を表す Optional を返し、それ以外の場合は空の Optional を返します。 |
| 4 | <U> Optional<U> flatMap(Function<? super T,Optional<U>> mapper)
値が存在する場合は、Optional に含まれるマッピングメソッドに基づく値を返し、それ以外の場合は空の Optional を返します。 |
| 5 | T get()
この Optional に値が含まれている場合はその値を返し、含まれていない場合は例外 NoSuchElementException をスローします。 |
| 6 | int hashCode()
存在する値のハッシュコードを返し、値が存在しない場合は 0 を返します。 |
| 7 | void ifPresent(Consumer<? super T> consumer)
値が存在する場合はその値で consumer を呼び出し、それ以外の場合は何も行いません。 |
| 8 | boolean isPresent()
値が存在する場合はメソッドは true を返し、それ以外の場合は false を返します。 |
| 9 | <U>Optional<U> map(Function<? super T,? extends U> mapper)
値がある場合は、それに対してマッピング関数を呼び出して戻り値を取得します。戻り値が null でない場合は、マッピングの戻り値を含む Optional を作成し、map メソッドの戻り値として返します。それ以外の場合は空の Optional を返します。 |
| 10 | static <T> Optional<T> of(T value)
指定された非 null 値を持つ Optional を返します。 |
| 11 | static <T> Optional<T> ofNullable(T value)
空でない場合は、Optional が表す指定値を返し、それ以外の場合は空の Optional を返します。 |
| 12 | T orElse(T other)
値が存在する場合はその値を返し、それ以外の場合は other を返します。 |
| 13 | T orElseGet(Supplier<? extends T> other)
値が存在する場合はその値を返し、それ以外の場合は other を呼び出し、other の呼び出し結果を返します。 |
| 14 | <X extends Throwable> T orElseThrow(Supplier<? extends X> exceptionSupplier)
値が存在する場合は含まれる値を返し、それ以外の場合は Supplier から継承された例外をスローします。 |
| 15 | String toString()
デバッグに適した Optional の非 null 文字列表現を返します。 |
注意:これらのメソッドはjava.lang.Objectクラスから継承されています。
Optional インスタンス
以下の例を通して、Optional クラスの使用方法をよりよく理解できます。
Java8Tester.java ファイル
上記のスクリプトを実行すると、出力結果は次のとおりです。
$ javac Java8Tester.java $ java Java8Tester 第一个参数值存在: false 第二个参数值存在: true 10
その他の拡張
Java 8 新機能