Dacă ați petrecut ceva timp dezvoltând programe în Java, la un moment dat ați văzut cu siguranță următoarea excepție:
java.lang.NullPointerException
Unele probleme majore de producție apar din cauza NullPointerException
. În acest articol, vom trece în revistă câteva modalități de gestionat NullPointerException
în Java.
Conţinut
Verificare nulă simplă
Luați în considerare următoarea bucată de cod:
public static void main(String args[]) {
String input1 = null;
simpleNullCheck(input1);
}
private static void simpleNullCheck(String str1) {
System.out.println(str1.length());
}
Dacă rulați acest cod ca atare, veți obține următoarea excepție:
Exception in thread "main" java.lang.NullPointerException
Motivul pentru care primiți această eroare este că încercăm să efectuăm length()
operație activată str1
care este null
.
O soluție ușoară pentru aceasta este să adăugați o verificare nulă str1
așa cum se arată mai jos:
private static void simpleNullCheck(String str1) {
if (str1 != null) {
System.out.println(str1.length());
}
}
Acest lucru va asigura că, când str1
este null
, nu rulați length()
funcționează pe ea.
Dar este posibil să aveți următoarea întrebare.
Ce se întâmplă dacă str1 este o variabilă importantă?
În acest caz, puteți încerca așa ceva:
private static void simpleNullCheck(String str1) {
if (str1 != null) {
System.out.println(str1.length());
} else {
// Perform an alternate action when str1 is null
// Print a message saying that this particular field is null and hence the program has to stop and cannot continue further.
}
}
Ideea este că, atunci când te aștepți să fie o valoare null
, este mai bine să puneți un null
verificați acea variabilă. Și dacă valoarea se dovedește a fi null
, ia o acțiune alternativă.
Acest lucru se aplică nu numai șirurilor, ci oricărui alt obiect din Java.
Lombok Null Check
Luați acum următorul exemplu:
public static void main(String args[]) {
String input2 = "test";
List<String> inputList = null;
lombokNullCheck(input2, inputList, input2);
}
public static void lombokNullCheck(String str1, List<String> strList, String str2) {
System.out.println(str1.length() + strList.size() + str2.length());
}
Aici avem o funcție care acceptă trei argumente: str1
, strList
, și str2
.
Dacă oricare dintre aceste valori se dovedește a fi null
, nu vrem să executăm deloc logica în această funcție.
Cum realizezi acest lucru?
Acesta este locul în care Lombok vine la îndemână. Pentru a adăuga biblioteca Lombok în codul dvs., includeți următoarea dependență Maven:
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
<scope>provided</scope>
</dependency>
Pentru a afla mai multe despre Maven, verificați Acest articol.
Iată cum ar arăta codul cu Lombok null
Verifica:
public static void main(String args[]) {
String input2 = "test";
List<String> inputList = null;
try {
lombokNullCheck(input2, inputList, input2);
} catch (NullPointerException e) {
System.out.println(e);
}
}
public static void lombokNullCheck(@NonNull String str1, @NonNull List<String> strList, @NonNull String str2) {
System.out.println(str1.length() + strList.size() + str2.length());
}
Înainte de fiecare argument al funcției adăugăm @NonNull
adnotare.
De asemenea, atunci când numim această funcție, punem un try-catch
blocați în jurul apelului funcției pentru a prinde NullPointerException
.
Dacă oricare dintre argumentele date în funcție se dovedește a fi null
, funcția ar arunca un NullPointerException
. Acest lucru va fi apoi prins de try-catch
bloc.
Acest lucru asigură că, dacă vreunul dintre argumentele funcției se dovedește a fi null
, atunci logica din funcție nu este executată și știm că codul nu se va comporta neobișnuit.
Acest lucru se poate face cu o grămadă de null
verificați și declarațiile. Dar utilizarea Lombok ne ajută să evităm să scriem mai multe null
declarațiile de verificare și face codul să pară mult mai curat.
Liste și nulități
Spuneți că aveți o listă și că doriți să imprimați toate elementele din listă:
List<String> stringList = new ArrayList<>();
stringList.add("ele1");
stringList.add("ele2");
if (stringList != null) {
for (String element : stringList)
System.out.println(element);
}
Înainte de a parcurge lista, trebuie să punem un null
verificați pe listă.
Dacă null
verificarea nu este prezentă, încercând apoi să parcurgeți un null
lista va arunca o NullPointerException
.
Hărți și Nule
Să luăm scenariul în care trebuie să accesați valoarea unei anumite chei dintr-o hartă:
Map<String, String> testMap = new HashMap<>();
testMap.put("first_key", "first_val");
if (testMap != null && testMap.containsKey("first_key")) {
System.out.println(testMap.get("first_key"));
}
Mai întâi trebuie să facem o verificare nulă asupra obiectului hartă în sine. Dacă acest lucru nu este făcut, iar harta este null
, apoi o NullPointerException
este aruncat. Acest lucru se face folosind testMap!=null
Odată ce ați făcut acest lucru, verificați dacă o anumită cheie este prezentă înainte de a o accesa. Puteți verifica prezența cheii folosind testMap.containsKey("first_key")
. Dacă acest lucru nu se face și cheia specială este absentă, atunci veți obține valoarea ca null
.
Este necesar să adăugați întotdeauna un Null Check?
Dacă știți sigur că o anumită variabilă nu poate fi niciodată null
, atunci puteți evita adăugarea null
Verifica. Acest lucru poate fi aplicabil în funcții private în care puteți controla intrarea datelor în funcție.
Dar dacă nu sunteți sigur cu privire la nulitatea unui obiect, cel mai bine este să adăugați un null
Verifica.
Cod
Toate codurile discutate în acest articol pot fi găsite în această repo Github.
felicitări ?
Acum știi cum să te descurci NullPointerException
în Java!
Despre autor
Ador tehnologia și urmăresc progresele în domeniu. De asemenea, îmi place să îi ajut pe alții cu cunoștințele mele de tehnologie.
Simțiți-vă liber să citiți mai multe articole despre blogul meu, conectează-te cu mine pe LinkedInsau urmează-mă Stare de nervozitate.
#Cum #să #gestionați #NullPointerException #în #Java
Cum să gestionați NullPointerException în Java