Tavaszi Null-Safety Annotations
1. Áttekintés
Az 5. tavasztól kezdve hozzáférhetünk egy érdekes funkcióhoz, amely segít nekünk a biztonságosabb kód megírásában. Ezt a funkciót null-safety-nek hívják, a jelölések egy csoportja, amely úgy működik, mint egy óvintézkedés, amely figyeli az esetleges null referenciákat.
Ahelyett, hogy hagynánk megúszni a nem biztonságos kódot, a null-biztonsági funkció fordításkor figyelmeztetéseket ad ki. Az ilyen figyelmeztetések megakadályozhatják a futás közbeni katasztrofális null pointer kivételeket (NPE).
2. A @NonNull Megjegyzés
A @NonNull az anotáció a legfontosabb a semmibiztonsági szolgáltatás összes kommentárja között. Ezt a t0 declare non-null kényszer korlátozást bárhol használhatjuk, ha egy objektumra hivatkozás várható: mező, metódus paraméter vagy egy módszer visszatérési értéke.
Tegyük fel, hogy van egy nevű osztályunk Személy:
public class Személy {private String teljesNév; void setFullName (Karakterlánc teljesNév) {if (teljesNév! = null && teljesNév.isEmpty ()) {teljesNév = null; } ez.teljesNév = teljesNév; } // getter}
Ez az osztálydefiníció érvényes, de van hibája - a teljes név mező lehet nulla. Ha ez megtörténik, akkor NPE-vel végezhetünk, amikor vele dolgozunk teljes név.
A tavaszi null-biztonsági funkció lehetővé teszi az eszközök számára az ilyen veszély bejelentését. Például, ha kódot írunk az IntelliJ IDEA-ba, és díszítjük a teljes név mező a @NonNull kommentár, figyelmeztetést fogunk látni:

Ennek a jelzésnek köszönhetően előre tisztában vagyunk a problémával, és megfelelő intézkedéseket tudunk hozni a futásidejű hibák elkerülése érdekében.
3. Az @NonNullFields Megjegyzés
A @NonNull az annotáció hasznos a null-biztonság garantálásában. Mindazonáltal szennyeznénk az egész kódbázist, ha az összes nem null mezőt ezzel a kommentárral díszítenénk.
Elkerülhetjük a @NonNull egy másik kommentárral - @NonNullFields. Ez az annotáció a csomag szintjén alkalmazható, értesítve a fejlesztő eszközeinket arról, hogy az annotált csomag összes mezője alapértelmezés szerint nem null.
A @NonNullFields felirat beindításához létre kell hoznunk egy nevű fájlt package-info.java a csomag gyökérkönyvtárában, és jegyezze fel a csomagot a @NonNullFields:
@NonNullFields csomag org.baeldung.nullibility;
Nyújtsunk be egy másik tulajdonságot a Személy osztály, hívják becenév:
org.baeldung.nullibility csomag; // utasítások importálása public class Person {private String nickName; void setNickName (@Nullable String becenév) {if (nickNév! = null && nickNév.isEmpty ()) {nickName = null; } this.nickName = nickName; } // egyéb nyilatkozatok}
Ezúttal nem szépítjük a becenév mezővel @NonNull de mégis hasonló figyelmeztetést lát:

A @NonNullFields az annotáció a kódunkat kevésbé bőbeszédűvé teszi, miközben biztosítja a biztonság azonos szintjét @NonNull biztosítja.
4. A @Nullable Megjegyzés
A @NonNullFields az annotáció általában előnyösebb, mint a @NonNull mivel segít csökkenteni a kazántáblát. Időnként fel akarunk menteni néhány mezőt a csomag szintjén megadott nem null korlátozás alól.
Térjünk vissza a becenév mezőt, és díszítse a @Nullable kommentár:
@Nullable private String nickName;
Az a figyelmeztetés, amelyet korábban láttunk, elmúlt:

Ebben a helyzetben, használtuk a @Nullable annotáció felülírja a szemantikáját @NonNullFields mezőn.
5. A @NonNullApi Megjegyzés
A @NonNullFields az annotáció csak a mezőkre vonatkozik, amint a neve is mutatja. Ha ugyanolyan hatást akarunk gyakorolni a módszerek paramétereire és visszatérési értékeire, akkor szükségünk lesz rá @NonNullApi.
Mint @NonNullFields, meg kell adnunk a @NonNullApi annotáció a package-info.java fájl:
@NonNullApi csomag org.baeldung.nullibility;
Határozzunk meg egy gettert a becenév terület:
org.baeldung.nullibility csomag; // kimutatások importálása public class Person {@Nullable private String becenév; Karakterlánc getNickName () {return nickName; } // egyéb nyilatkozatok}
A ... val @NonNullApi annotáció van érvényben, figyelmeztetést adnak ki egy lehetségesről nulla által termelt érték getNickName módszer:

Vegyük észre, hogy akárcsak a @NonNullFields annotációval felülírhatjuk a @NonNullApi módszer szintjén a @Nullable annotáció.
6. Következtetés
A tavaszi null-biztonság nagyszerű tulajdonság, amely segít csökkenteni az NPE-k lehetőségét. Két fontos szempontból azonban óvakodnunk kell a funkció használata közben:
- Csak egy támogató fejlesztőeszközben használható, például az IntelliJ IDEA-ban
- Nem érvényesíti nulla futás közbeni ellenőrzések - még mindig magunknak kell kódot írnunk az NPE-k elkerülése érdekében
Az oktatóanyag forráskódja a GitHub oldalon található.