1. はじめに
- JavaでOptionalの使い方を理解したい
2. 開発環境
- Java 21
3. Optionalの生成
- 3つのファクトリメソッドのいずれかから生成する
メソッド | 備考 |
---|---|
of(T value) | Optionalを生成。値がnullの場合はNullPointException。 |
ofNullable(T value)) | Optionalを生成。値がnullの場合は空のOptional。 |
empty() | 常に空のOptional。 |
- NullPointExceptionにならないからといって何も考えずにofNullable()を利用してはいけない
- 本来NULLになっては行けない場合にof()を使っておけばnullチェックになる
- 自然にNULLが考えられる場合はofNullable()を使用する
4. Optionalのメソッド
- Optionalで値を取り出すときは、次の4つのメソッドを使用する
- 値が存在しなかった場合の振る舞いが違うので、利用する時に注意する
メソッド | 値が存在する場合 | 値が存在しない場合 |
---|---|---|
get() | 値を返却する | NoSucheElementException |
orElse(T other) | 値を返却する | 指定された値を返却する |
ofElseGet(Supper extends T> other) | 値を返却する | 指定されたsupplierから生成した値を返却する |
ofElseThrow(Supper extends X> exceptionSupplier) | 値を返却する | 指定されたsupplierから生成した例外をThrow |
- get()は値がなかった場合はNoSuchElementExceptionが発生し、NullPointExceptionではない
- orElse()とorElseGet()は似ているが違っていて、orElseGet()はSupplierから値を生成するため遅延実行にある
5. Optionalのアンチパターン
- NGのパターン
Person person = null;
if (optional.isPresent()) {
person = optional.get();
}
- OKのパターン
- orElse(), orElseThrow()等の使用を検討する
Person person = optional.ofElse(null);