Proljetne null-sigurnosne bilješke

1. Pregled

Počevši od Proljeća 5, sada imamo pristup zanimljivoj značajci koja nam pomaže pri pisanju sigurnijeg koda. Ova se značajka naziva null-security, skupina bilješki koja djeluje poput zaštite koja pazi na potencijalne null reference.

Umjesto da nas pusti da pobjegnemo s nesigurnim kodom, značajka nul-sigurnosti daje upozorenja u vrijeme sastavljanja. Takva upozorenja mogu spriječiti katastrofalne iznimke null pokazivača (NPE) tijekom izvođenja.

2. The @NonNull Bilješka

The @NonNull napomena je najvažnija među svim bilješkama značajke nul-sigurnosti. Ovu bilješku t0 možemo proglasiti ne-null ograničenje bilo gdje gdje se očekuje referenca na objekt: polje, parametar metode ili povratna vrijednost metode.

Pretpostavimo da imamo razred s imenom Osoba:

javni razred Osoba {private String fullName; void setFullName (String fullName) {if (fullName! = null && fullName.isEmpty ()) {fullName = null; } this.fullName = puno ime; } // dobivač}

Ova je definicija klase valjana, ali ima nedostatak - puno ime polje može biti postavljeno na null. Ako se to dogodi, mogli bismo dobiti NPE kad radimo s puno ime.

Značajka nulske sigurnosti Spring omogućuje alatima da prijave takvu opasnost. Na primjer, ako napišemo kod u IntelliJ IDEA i ukrasimo puno ime polje s @NonNull napomena, vidjet ćemo upozorenje:

Zahvaljujući ovoj naznaci, unaprijed smo svjesni problema i u mogućnosti smo poduzeti odgovarajuće mjere kako bismo izbjegli neuspjeh u izvođenju.

3. The @NonNullFields Bilješka

The @NonNull napomena je korisna u jamčenju ništetne sigurnosti. Međutim, zagađivali bismo cijelu bazu koda ako ovom bilješkom ukrasimo sva ne-null polja.

Možemo izbjeći zlouporabu @NonNull s drugom napomenom - @NonNullFields. Ova je napomena primjenjiva na razini paketa, obavještavajući naše razvojne alate da sva polja u označenom paketu prema zadanim postavkama nisu null.

Za @NonNullFields napomena za pokretanje, moramo stvoriti datoteku s imenom package-info.java u korijenski direktorij paketa i označite paket s @NonNullFields:

@NonNullFields paket org.baeldung.nullibility;

Proglasimo još jedno svojstvo u Osoba razred, nazvan nadimak:

paket org.baeldung.nullibility; // uvoz izjava javna klasa Osoba {private String nickName; void setNickName (@Nullable String nickName) {if (nickName! = null && nickName.isEmpty ()) {nickName = null; } this.nickName = nadimak; } // ostale izjave}

Ovaj put ne uljepšavamo nadimak polje sa @NonNull ali ipak uočite slično upozorenje:

The @NonNullFields anotacija čini naš kod manje opširnim, istodobno osiguravajući istu razinu sigurnosti kao i ona @NonNull pruža.

4. The @Nullable Bilješka

The @NonNullFields napomena je općenito poželjnija od @NonNull jer pomaže u smanjenju ploče. Ponekad želimo izuzeti neka polja iz ne-null ograničenja navedenog na razini paketa.

Vratimo se na nadimak polje i ukrasite ga s @Nullable napomena:

@Nullable private String nickName;

Upozorenje koje smo vidjeli prije nestalo je sada:

U ovoj situaciji, koristili smo @Nullable napomena da nadjača semantiku @NonNullFields na polju.

5. The @NonNullApi Bilješka

The @NonNullFields napomena odnosi se samo na, kako joj samo ime govori, polja. Ako želimo imati isti utjecaj na parametre metoda i povratne vrijednosti, trebat će nam @NonNullApi.

Kao i sa @NonNullFields, moramo navesti @NonNullApi bilješka u package-info.java datoteka:

@NonNullApi paket org.baeldung.nullibility;

Definirajmo getter za nadimak polje:

paket org.baeldung.nullibility; // uvoz izjava javne klase Osoba {@Nullable private String nickName; String getNickName () {return nickName; } // ostale izjave}

Uz @NonNullApi na snazi, izdaje se upozorenje o mogućem null vrijednost koju proizvodi getNickName metoda:

Primijetite da baš kao i @NonNullFields napomena, možemo nadjačati @NonNullApi na razini metode s @Nullable bilješka.

6. Zaključak

Proljetna nulska sigurnost sjajna je značajka koja pomaže umanjiti mogućnost NPE-a. Međutim, postoje dvije važne točke kojih se moramo pripaziti tijekom upotrebe ove značajke:

  • Koristi se samo u pratećem razvojnom alatu, kao što je IntelliJ IDEA
  • Ne provodi null provjere tijekom izvođenja - još uvijek moramo sami napisati kôd kako bismo spriječili NPE-ove

Izvorni kod za ovu lekciju možete pronaći na GitHubu.


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