Ce face Optional.of
Optional.of(x) învelește o valoare despre care știi că nu este null; dacă totuși e null, aruncă imediat NullPointerException, ceea ce te ajută să prinzi greșeala devreme.
Optional.ofNullable(x) este puntea dintre codul vechi, care returnează null, și Optional: dacă x este null, primești un Optional gol. Optional.empty() returnează direct un Optional gol, pentru cazul „nu am găsit”.
Parametri
| Parametru | Descriere |
|---|---|
value |
Valoarea învelită. |
Ce returnează
Un Optional plin sau gol.
Exemple
Exemplul 1: Cele trei moduri de a crea un Optional
import java.util.Optional;
public class Main {
public static void main(String[] args) {
Optional<String> a = Optional.of("Iași");
Optional<String> b = Optional.ofNullable(null);
Optional<String> c = Optional.empty();
System.out.println(a + " " + b + " " + c);
try {
Optional.of(null);
} catch (NullPointerException e) {
System.out.println("Optional.of(null): NullPointerException");
}
}
}
Rezultat
Optional[Iași] Optional.empty Optional.empty
Optional.of(null): NullPointerException
Exemplul 2: O metodă de căutare care returnează Optional
import java.util.List;
import java.util.Optional;
public class Main {
record Produs(String cod, String nume, double pret) {}
static final List<Produs> catalog = List.of(
new Produs("P1", "cafea", 24.5), new Produs("P2", "ceai", 9.9));
static Optional<Produs> dupaCod(String cod) {
for (Produs p : catalog) {
if (p.cod().equals(cod)) {
return Optional.of(p);
}
}
return Optional.empty();
}
public static void main(String[] args) {
System.out.println(dupaCod("P2").map(Produs::nume).orElse("inexistent"));
System.out.println(dupaCod("P9").map(Produs::nume).orElse("inexistent"));
}
}
Rezultat
ceai
inexistent
Greșeli frecvente
- Folosești
Optional.ofpe o valoare care poate finull(de exemplu rezultatul luimap.get). FoloseșteofNullable. - Scrii
return null;într-o metodă care returneazăOptional. Scriereturn Optional.empty();.
Comenzi înrudite
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.Optional.isPresent: isPresent() spune dacă Optional-ul conține o valoare, isEmpty() dacă e gol; get() returnează valoarea sau aruncă excepție.Optional.orElse: orElse returnează valoarea sau o rezervă dată; orElseGet calculează rezerva cu o funcție, doar când e nevoie.Optional.equals: Două Optional-uri sunt egale dacă ambele sunt goale sau au valori egale; toString afișează Optional[valoare] sau Optional.empty.