Errors 初級

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
難易度
初級
引数なしのOptional.orElseThrow()
利用可能

JDK 10(2018年3月)以降、利用可能

Optional.get()は失敗の可能性を隠すためコードの問題とみなされています。Java 10で追加された引数なしのorElseThrow()はまったく同じことをしますが、意図を明確にします。値を期待していて、存在しない場合は例外をスローすることを示します。

共有 𝕏 🦋 in