Ce face Objects.requireNonNull
Objects.requireNonNull(obj, mesaj) returnează obj dacă nu este null; altfel aruncă NullPointerException cu mesajul dat. Se folosește la începutul constructorilor și metodelor, ca eroarea să apară imediat, la locul unde s-a primit valoarea greșită, nu mai târziu, într-un loc greu de găsit.
Objects.requireNonNullElse(obj, implicit) (Java 9) returnează obj dacă nu este null, altfel implicit. Valoarea implicită nu poate fi ea însăși null (ar arunca excepție). Există și requireNonNullElseGet, care calculează valoarea implicită doar când e nevoie.
Parametri
| Parametru | Descriere |
|---|---|
obj |
Valoarea verificată. |
mesaj |
Mesajul excepției, dacă obj este null. |
implicit |
Valoarea folosită în locul lui null. |
Ce returnează
Chiar obj (sau implicit), ca să poată fi folosit direct într-o atribuire.
Exemple
Exemplul 1: Validare în constructor
import java.util.Objects;
public class Main {
static class Comanda {
final String client;
final String adresa;
Comanda(String client, String adresa) {
this.client = Objects.requireNonNull(client, "clientul este obligatoriu");
this.adresa = Objects.requireNonNull(adresa, "adresa este obligatorie");
}
}
public static void main(String[] args) {
Comanda ok = new Comanda("Ana", "Iași");
System.out.println("Comandă pentru " + ok.client);
try {
new Comanda("Ion", null);
} catch (NullPointerException e) {
System.out.println("Eroare: " + e.getMessage());
}
}
}
Rezultat
Comandă pentru Ana
Eroare: adresa este obligatorie
Exemplul 2: Valoare implicită pentru null
Ultimul apel are și valoarea implicită null; mesajul excepției este defaultObj, numele parametrului din JDK.
import java.util.Map;
import java.util.Objects;
public class Main {
public static void main(String[] args) {
Map<String, String> orase = Map.of("Ana", "Iași", "Ion", "Cluj");
for (String nume : new String[] {"Ana", "Maria"}) {
String oras = Objects.requireNonNullElse(orase.get(nume), "necunoscut");
System.out.println(nume + ": " + oras);
}
try {
Objects.requireNonNullElse(null, null);
} catch (NullPointerException e) {
System.out.println("Eroare: " + e.getMessage());
}
}
}
Rezultat
Ana: Iași
Maria: necunoscut
Eroare: defaultObj
Greșeli frecvente
- Apelezi
requireNonNullși ignori rezultatul, apoi folosești altă variabilă. Metoda nu „repară” nimic, doar verifică; folosește valoarea returnată. - Construiești un mesaj scump (cu concatenări) la fiecare apel: există varianta
requireNonNull(obj, () -> "mesaj " + x), care construiește mesajul doar la eroare.
Comenzi înrudite
Objects: Clasa java.util.Objects are metode statice care lucrează sigur cu null; equals() compară două obiecte care pot fi null.Objects.toString: Transformă un obiect în text fără să arunce excepție pentru null: dă „null” sau textul ales de tine.System.getenv: Citește variabilele de mediu ale sistemului (PATH, HOME sau setări proprii ca DB_URL); null dacă variabila nu există.Constructori: Constructorul are numele clasei, nu are tip returnat și pregătește obiectul nou; o clasă poate avea mai mulți constructori.