Bezpečnostné poznámky s pružinou

1. Prehľad

Počnúc jarom 5 máme teraz prístup k zaujímavej funkcii, ktorá nám pomáha písať bezpečnejší kód. Táto vlastnosť sa nazýva nulová bezpečnosť, skupina anotácií fungujúcich ako ochrana, ktorá sleduje potenciálne nulové odkazy.

Namiesto toho, aby sme sa dostali preč s nebezpečným kódom, funkcia nulovej bezpečnosti vytvára varovania v čase kompilácie. Takéto varovania môžu zabrániť katastrofickým výnimkám nulového ukazovateľa (NPE) za behu programu.

2. The @NonNull Anotácia

The @NonNull anotácia je najdôležitejšia spomedzi všetkých anotácií nulového bezpečnostného prvku. Túto anotáciu môžeme použiť na vyhlásenie nenulového obmedzenia kdekoľvek, kde sa očakáva odkaz na objekt: pole, parameter metódy alebo návratová hodnota metódy.

Predpokladajme, že máme pomenovanú triedu Osoba:

verejná trieda Osoba {private String fullName; void setFullName (reťazec fullName) {if (fullName! = null && fullName.isEmpty ()) {fullName = null; } this.fullName = fullName; } // getter}

Táto definícia triedy je platná, ale má chybu - celé meno pole môže byť nastavené na nulový. Ak sa to stane, pri práci by sme mohli skončiť s NPE celé meno.

Funkcia pruženia s nulovou poistkou umožňuje nástrojom hlásiť také nebezpečenstvo. Napríklad, ak napíšeme kód do IntelliJ IDEA a ozdobíme celé meno pole s @NonNull anotácie, zobrazí sa varovanie:

Vďaka tejto indikácii sme si vedomí problému vopred a sme schopní podniknúť príslušné kroky, aby sme sa vyhli zlyhaniu za behu.

3. The @NonNullFields Anotácia

The @NonNull anotácia je užitočná pri zaručení nulovej bezpečnosti. Ak by sme však touto anotáciou zdobili všetky nenulové polia, znečistili by sme celý kódový základ.

Môžeme sa vyhnúť zneužívaniu @NonNull s inou anotáciou - @NonNullFields. Táto anotácia je použiteľná na úrovni balíka a upozorňuje naše vývojové nástroje, že všetky polia v anotovanom balíku sú predvolene nenulové.

Pre @NonNullFields anotácie na spustenie, musíme vytvoriť súbor s názvom balíček-info.java v koreňovom adresári balíka a anotovať balík pomocou @NonNullFields:

@NonNullFields balíček org.baeldung.nullibility;

Vyhlásime inú nehnuteľnosť v Osoba triedy, tzv prezývka:

balík org.baeldung.nullibility; // import výpisov verejná trieda Osoba {private String nickName; void setNickName (@Nullable String nickName) {if (nickName! = null && nickName.isEmpty ()) {nickName = null; } this.nickName = nickName; } // ďalšie vyhlásenia}

Tentokrát nezdobíme prezývka pole s @NonNull ale stále vidíte podobnú výhradu:

The @NonNullFields anotácia robí náš kód menej podrobným a zároveň zaisťuje rovnakú úroveň bezpečnosti ako @NonNull poskytuje.

4. The @ Nullable Anotácia

The @NonNullFields anotácia je všeobecne výhodnejšia ako @NonNull pretože pomáha znižovať štandardné hodnoty. Občas chceme niektoré polia vyňať z obmedzenia nenulového rozsahu špecifikovaného na úrovni balíka.

Vráťme sa k prezývka pole a ozdobte ho @ Nullable anotácia:

@ Nullable private String nickname;

Varovanie, ktoré sme videli predtým, je teraz preč:

V tejto situácii, použili sme @ Nullable anotácia prepísať sémantiku @NonNullFields na poli.

5. @NonNullApi Anotácia

The @NonNullFields anotácia sa týka iba polí, ako to naznačuje jej názov. Ak chceme mať rovnaký dopad na parametre a návratové hodnoty metód, budeme potrebovať @NonNullApi.

Ako s @NonNullFields, musíme špecifikovať @NonNullApi anotácia v balíček-info.java spis:

@NonNullApi balíček org.baeldung.nullibility;

Definujme getter pre prezývka lúka:

balík org.baeldung.nullibility; // import výpisov verejná trieda Osoba {@Nullable private Reťazec nickName; Reťazec getNickName () {návrat prezývka; } // ďalšie vyhlásenia}

Vďaka @NonNullApi anotácia v platnosti, je vydané varovanie o možnom nulový hodnota vyprodukovaná getNickName metóda:

Všimnite si, že rovnako ako @NonNullFields anotáciu, môžeme prepísať @NonNullApi na úrovni metódy s @ Nullable anotácia.

6. Záver

Zabezpečenie pružiny bez brzdenia je skvelá vlastnosť, ktorá pomáha znižovať možnosť výskytu NPE. Pri používaní tejto funkcie si však musíme dať pozor na dva dôležité body:

  • Je použiteľný iba v podpornom vývojovom nástroji, ako je IntelliJ IDEA
  • Nevynucuje nulový kontroly za behu - na odvrátenie NPE si musíme napísať kód sami

Zdrojový kód tohto tutoriálu nájdete na GitHub.


$config[zx-auto] not found$config[zx-overlay] not found