Optional.orElseThrow() bez dostawcy
Używaj Optional.orElseThrow() jako czytelniejszej alternatywy dla get().
Porównanie kodu
✕ 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();
Widzisz problem z tym kodem? Daj nam znać.
Dlaczego nowoczesne podejście wygrywa
Samo-dokumentujący
orElseThrow() wyraźnie sygnalizuje, że brak wartości jest nieoczekiwany.
Unikanie get()
Narzędzia analizy statycznej flagują get() jako ryzykowny; orElseThrow() jest idiomatyczny.
Mniej boilerplate
Nie trzeba przekazywać dostawcy dla domyślnego NoSuchElementException.
Stare podejście
get() lub orElseThrow(supplier)
Nowoczesne podejście
orElseThrow()
Od JDK
10
Poziom trudności
Początkujący
Wsparcie JDK
Optional.orElseThrow() bez dostawcy
Dostępne
Dostępne od JDK 10 (marzec 2018)
Jak to działa
Optional.get() jest powszechnie uważany za zapach kodu, bo ukrywa możliwość błędu. Bezargumentowy orElseThrow(), dodany w Java 10, robi dokładnie to samo, ale czyni intencję jawną — programista oczekuje wartości i chce wyjątku przy jej braku.
Powiązana dokumentacja
Dowód