Errors Einsteiger

Optional.orElseThrow() als klarere, absichtsverrätende Alternative zu get() verwenden.

✕ 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();
Problem mit diesem Code entdeckt? Sag uns Bescheid.
📖

Selbst-dokumentierend

orElseThrow() signalisiert klar, dass ein leeres Ergebnis nicht erwartet wird.

🔒

Kein get()

Statische Analysetools markieren get() als riskant; orElseThrow() ist idiomatisch.

Weniger Boilerplate

Kein Supplier für die standardmäßige NoSuchElementException erforderlich.

Alter Ansatz
get() oder orElseThrow(supplier)
Moderner Ansatz
orElseThrow()
Seit JDK
10
Schwierigkeitsgrad
Einsteiger
Optional.orElseThrow() ohne Supplier
Verfügbar

Verfügbar seit JDK 10 (März 2018).

Optional.get() gilt weithin als Code-Smell, weil es die Möglichkeit des Scheiterns verbirgt. Das argumentlose orElseThrow(), das in Java 10 hinzugefügt wurde, tut genau dasselbe, macht die Absicht aber explizit: Der Entwickler erwartet einen Wert und möchte eine Ausnahme, wenn keiner vorhanden ist.

Teilen 𝕏 🦋 in