Optional.orElseThrow() ohne Supplier
Optional.orElseThrow() als klarere, selbsterklärende 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
Selbstdokumentierend
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
Beweis