Skip to content

Optional in Java — Cum să eviți NullPointerException

DodaTech Updated 2025-01-15 2 min read

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ă verifici isPresent() — 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 Optional ca parametru — folosește overloading sau null checks clasice

Common Mistakes

  1. Folosirea lui Optional.of() cu valori null — aruncă NullPointerException imediat. Folosește Optional.ofNullable().
  2. Returnarea null în loc de Optional.empty() — distruge scopul lui Optional.
  3. Folosirea lui Optional în câmpuri sau serializare — Optional nu e Serializable.

FAQ

### Ce este Optional în Java?

Optional este un container care poate conține o valoare non-null sau poate fi gol. A fost introdus în Java 8 pentru a reduce NullPointerException.

Când ar trebui să folosesc Optional?

Ca tip de returnare pentru metode care ar putea să nu aibă un rezultat. Nu folosi Optional pentru câmpuri, parametri sau colecții.

Ce diferență este între orElse și orElseGet?

orElse evaluează argumentul întotdeauna, chiar dacă Optional nu e gol. orElseGet evaluează doar dacă Optional e gol (evaluare lazy).

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