Ce face Optional.orElseThrow
orElseThrow() fără argumente returnează valoarea sau aruncă NoSuchElementException. Face același lucru ca get(), dar numele spune clar ce se întâmplă pe gol.
Varianta cu o funcție îți permite să alegi excepția și mesajul: orElseThrow(() -> new IllegalArgumentException("Produs inexistent: " + cod)). Este potrivită când lipsa valorii este o eroare reală, pe care codul de mai sus trebuie să o afle.
Parametri
| Parametru | Descriere |
|---|---|
exceptionSupplier |
Funcția care creează excepția aruncată. |
Ce returnează
Valoarea din Optional.
Exemple
Exemplul 1: Valoarea trebuie să existe
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Integer> note = List.of(8, 10, 6);
int maxima = note.stream().max(Integer::compare).orElseThrow();
System.out.println("Maxima: " + maxima);
}
}
Rezultat
Maxima: 10
Exemplul 2: Excepție cu mesaj propriu
import java.util.Map;
import java.util.Optional;
public class Main {
static final Map<String, Double> preturi = Map.of("P1", 24.5, "P2", 9.9);
static double pret(String cod) {
return Optional.ofNullable(preturi.get(cod))
.orElseThrow(() -> new IllegalArgumentException("Produs inexistent: " + cod));
}
public static void main(String[] args) {
System.out.println(pret("P1"));
try {
System.out.println(pret("P7"));
} catch (IllegalArgumentException e) {
System.out.println("Eroare: " + e.getMessage());
}
}
}
Rezultat
24.5
Eroare: Produs inexistent: P7
Greșeli frecvente
- Folosești
orElseThrowcând lipsa valorii este normală (de exemplu un câmp opțional). FoloseșteorElsecu o valoare implicită. - Scrii
orElseThrow(new Exceptie(...)). Metoda cere o funcție:orElseThrow(() -> new Exceptie(...)).
Comenzi înrudite
Optional.orElse: orElse returnează valoarea sau o rezervă dată; orElseGet calculează rezerva cu o funcție, doar când e nevoie.Optional.isPresent: isPresent() spune dacă Optional-ul conține o valoare, isEmpty() dacă e gol; get() returnează valoarea sau aruncă excepție.Optional: O „cutie” care conține o valoare sau este goală. Arată clar că un rezultat poate lipsi și te obligă să tratezi cazul, în loc de null.