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