Optional.orElseThrow() ohne Supplier
Optional.orElseThrow() als klarere, absichtsverrätende Alternative zu get() verwenden.
Code-Vergleich
✕ 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.
Warum der moderne Weg gewinnt
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
JDK-Unterstützung
Optional.orElseThrow() ohne Supplier
Verfügbar
Verfügbar seit JDK 10 (März 2018).
Wie es funktioniert
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.
Zugehörige Dokumentation