引数なしのOptional.orElseThrow()
get()の代わりに意図を明確に示すOptional.orElseThrow()を使う。
コード比較
✕ Java 8
// Risky: get() throws if empty, no clear intent
String value = optional.get();
// Verbose: supplier just for NoSuchElementException
String value = optional
.orElseThrow(NoSuchElementException::new);
✓ Java 10+
// Clear intent: throws NoSuchElementException if empty String value = optional.orElseThrow();
このコードに問題がありますか? お知らせください。
モダンな方法が優れている理由
自己文書化
orElseThrow()は値がないことが予期外であることを明示します。
get()を避ける
静的解析ツールはget()をリスクとして指摘します。orElseThrow()は慣用的です。
ボイラープレート削減
デフォルトのNoSuchElementExceptionのためにサプライヤを渡す必要がありません。
旧来のアプローチ
get()またはorElseThrow(supplier)
モダンなアプローチ
orElseThrow()
JDKバージョン
10
難易度
初級
JDKサポート
引数なしのOptional.orElseThrow()
利用可能
JDK 10(2018年3月)以降、利用可能
仕組み
Optional.get()は失敗の可能性を隠すためコードの問題とみなされています。Java 10で追加された引数なしのorElseThrow()はまったく同じことをしますが、意図を明確にします。値を期待していて、存在しない場合は例外をスローすることを示します。
関連ドキュメント