Optional in Java — Cum să eviți NullPointerException
In this tutorial, you'll learn about Optional in Java. We cover key concepts, practical examples, and best practices.
Optional este o clasă container introdusă în Java 8 care poate sau nu să conțină o valoare non-null, forțându-te să verifici existența valorii înainte de a o folosi și eliminând astfel riscul de NullPointerException.
The Problem
Accesarea directă a valorilor care pot fi null duce la NullPointerException — cea mai frecventă excepție în aplicațiile Java. Acest quick-fix îți arată cum să folosești Optional pentru un cod mai sigur și mai expresiv.
The Wrong Way
public String getCity(User user) {
return user.getAddress().getCity().toUpperCase();
}
Output:
Exception in thread "main" java.lang.NullPointerException
Dacă user, address sau city este null, aplicația crapă fără un mesaj util.
The Right Way
import java.util.Optional;
public String getCity(User user) {
return Optional.ofNullable(user)
.map(User::getAddress)
.map(Address::getCity)
.map(String::toUpperCase)
.orElse("Unknown City");
}
Output:
Unknown City
Step-by-Step Fix
1. Învelește valorile potențial null în Optional
Folosește Optional.ofNullable(valoare) pentru valori care pot fi null și Optional.of(valoare) când ești sigur că nu e null.
2. Lanțuiește transformări cu map()
Optional.ofNullable(user)
.map(User::getAddress)
.map(Address::getCity);
3. Asigură un fallback
.orElse("Default Value"); // valoare default
.orElseGet(() -> fetchDefault()); // Supplier, evaluare lazy
.orElseThrow(() -> new IllegalStateException("Missing value")); // aruncă excepție
Prevention Tips
- Nu folosi
Optional.get()fără să verificiisPresent()— reapare riscul de NPE - Preferă
orElseThrowîn loc să returnezi null din metode - Nu declara câmpuri de tip
Optionalîn clase — Optional e gândit pentru returnări - Nu pasa
Optionalca parametru — folosește overloading sau null checks clasice
Common Mistakes
- Folosirea lui
Optional.of()cu valori null — aruncă NullPointerException imediat. FoloseșteOptional.ofNullable(). - Returnarea null în loc de Optional.empty() — distruge scopul lui Optional.
- Folosirea lui Optional în câmpuri sau serializare — Optional nu e Serializable.
FAQ
Construit de dezvoltatorii Doda Browser, DodaZIP și Durga Antivirus Pro. Instrumentele DodaTech se integrează perfect cu Java pentru productivitate și securitate sporite.
Built by the developers of DodaTech
Doda Browser, DodaZIP & Durga Antivirus Pro