Kaip tvarkyti „NullPointerException“ „Java“

Jei kurį laiką praleidote kurdami programas „Java“, tam tikru momentu tikrai matėte šią išimtį:

java.lang.NullPointerException

Kai kurie pagrindiniai gamybos klausimai kyla dėl NullPointerException. Šiame straipsnyje mes apžvelgsime keletą būdų, kaip tvarkyti NullPointerException„Java“.

Paprastas niekinis patikrinimas

Apsvarstykite šį kodą:

public static void main(String args[]) { String input1 = null; simpleNullCheck(input1); } private static void simpleNullCheck(String str1) { System.out.println(str1.length()); }

Jei paleisite šį kodą tokį, koks yra, gausite šią išimtį:

Exception in thread "main" java.lang.NullPointerException

Priežastis, dėl kurios jūs gaunate šią klaidą, yra ta, kad mes bandome atlikti length()operacija, str1kurioje yra null.

Lengva tai išspręsti yra pridėti niekinį patikrinimą str1kaip parodyta žemiau:

private static void simpleNullCheck(String str1) { if (str1 != null) { System.out.println(str1.length()); } }

Tai užtikrins, kad kada str1yranull, jūs neveikiate length()funkcija.

Bet jums gali kilti toks klausimas.

Ką daryti, jei str1 yra svarbus kintamasis?

Tokiu atveju galite pabandyti ką nors panašaus:

 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. } }

Idėja yra ta, kad kai tikimasi, jog vertė bus null, geriau nullpatikrinti tą kintamąjį. Ir jei vertė pasirodo esanti null, atlikite alternatyvius veiksmus.

Tai taikoma ne tik eilutėms, bet ir bet kokiems kitiems „Java“ objektams.

„Lombok Null Check“

Dabar paimkite šį pavyzdį:

public static void main(String args[]) { String input2 = "test"; List inputList = null; lombokNullCheck(input2, inputList, input2); } public static void lombokNullCheck(String str1, List strList, String str2) { System.out.println(str1.length() + strList.size() + str2.length()); }

Čia mes turime funkciją, kuri priima tris argumentus: str1, strListir str2.

Jei kuri nors iš šių reikšmių pasirodo esanti null, mes visai nenorime vykdyti šios funkcijos logikos.

Kaip tai pasiekti?

Čia Lombokas yra naudingas. Norėdami įtraukti „Lombok“ biblioteką į savo kodą, įtraukite šią „Maven“ priklausomybę:

  org.projectlombok lombok 1.18.12 provided 

Norėdami sužinoti daugiau apie „Maven“, peržiūrėkite šį straipsnį.

Štai kaip kodas atrodys su „Lombok“ nullčekiu:

public static void main(String args[]) { String input2 = "test"; List inputList = null; try { lombokNullCheck(input2, inputList, input2); } catch (NullPointerException e) { System.out.println(e); } } public static void lombokNullCheck(@NonNull String str1, @NonNull List strList, @NonNull String str2) { System.out.println(str1.length() + strList.size() + str2.length()); }

Prieš kiekvieną funkcijos argumentą pridedame @NonNullanotacija.

Taip pat, kai mes vadiname šią funkciją, mes uždėjome try-catchbloką aplink funkcijos skambutį, kad sugautume NullPointerException.

Jei kuris nors iš funkcijoje pateiktų argumentų pasirodo esąs null, funkcija išmeta a NullPointerException. Tai tada būtų sugautas try-catchblokas.

Tai užtikrina, kad jei kuris nors iš funkcijos argumentų pasirodys esąs null, funkcijos logika nebus vykdoma ir žinome, kad kodas nesielgs neįprastai.

Tai galima padaryti ir su daugybe nullčekių išrašų. Tačiau naudodami „Lombok“ galime išvengti kelių nullčekių rašymo ir kodas atrodo žymiai švaresnis.

Sąrašai ir „Nulls“

Tarkime, kad turite sąrašą ir norite atspausdinti visus sąrašo elementus:

List stringList = new ArrayList(); stringList.add("ele1"); stringList.add("ele2"); if (stringList != null) { for (String element : stringList) System.out.println(element); }

Prieš peržiūrėdami sąrašą, turime nullpažymėti sąrašą.

Jei nullpatikrinimo nėra, tada bandant pereiti prie nullsąrašo bus metamas a NullPointerException.

Žemėlapiai ir „Nulls“

Paimkime scenarijų, kuriame reikia pasiekti tam tikro rakto reikšmę žemėlapyje:

Map testMap = new HashMap(); testMap.put("first_key", "first_val"); if (testMap != null && testMap.containsKey("first_key")) { System.out.println(testMap.get("first_key")); }

Pirmiausia turime atlikti nulinį patikrinimą pačiame žemėlapio objekte. Jei tai nepadaroma, o žemėlapis yra null, tada NullPointerExceptionmetamas a. Tai daroma naudojanttestMap!=null

Tai atlikę, prieš naudodamiesi, patikrinkite, ar yra tam tikras raktas. Galite patikrinti, ar raktas yra testMap.containsKey("first_key"). Jei tai nebus padaryta ir konkretaus rakto nėra, vertę gausite kaip null.

Ar būtina visada pridėti „Null Check“?

Jei tikrai žinote, kad konkretus kintamasis niekada negali būti null, tuomet negalėsite pridėti nullčekio. Tai gali būti taikoma privačiose funkcijose, kuriose galite valdyti duomenis, kurie eina į funkciją.

Bet jei nesate tikras dėl objekto niekingumo, geriausia pridėti nullčekį.

Kodas

Visą šiame straipsnyje aptartą kodą galite rasti šioje „Github“ repo.

Sveikiname ?

Dabar jūs žinote, kaip elgtis NullPointerException„Java“!

Apie autorių

Aš myliu technologijas ir laikausi pažangos šioje srityje. Man taip pat patinka padėti kitiems, turint žinių apie technologijas.

Nesivaržydami perskaitykite daugiau mano straipsnių savo tinklaraštyje, susisiekite su manimi „LinkedIn“ arba stebėkite mane „Twitter“.