Annulleringer om forårets nul-sikkerhed

1. Oversigt

Fra og med foråret 5 har vi nu adgang til en interessant funktion, der hjælper os med at skrive en mere sikker kode. Denne funktion kaldes null-safety, en gruppe annoteringer, der fungerer som en sikkerhedsforanstaltning, der holder øje med potentielle null-referencer.

I stedet for at lade os slippe af sted med usikker kode, null-safety-funktionen producerer advarsler på kompileringstidspunktet. Sådanne advarsler kan forhindre katastrofale undtagelser med null pointer (NPE) ved kørsel.

2. Den @NonNull Kommentar

Det @NonNull annotering er den vigtigste blandt alle kommentarerne til null-safety-funktionen. Vi kan bruge denne kommentar til at erklære ikke-nul-begrænsning overalt, hvor en objektreference forventes: et felt, en metodeparameter eller en metodes returværdi.

Antag, at vi har en klasse, der hedder Person:

offentlig klasse person {privat streng fuldnavn; ugyldigt setFullName (streng fuldnavn) {if (fullName! = null && fullName.isEmpty ()) {fullName = null; } this.fullName = fuldnavn; } // getter}

Denne klassedefinition er gyldig, men har en defekt - fulde navn felt kan indstilles til nul. Hvis dette sker, kan vi ende med en NPE, når vi arbejder med fulde navn.

Spring null-safety-funktionen gør det muligt for værktøjer at rapportere en sådan fare. For eksempel, hvis vi skriver kode i IntelliJ IDEA og dekorerer fulde navn felt med @NonNull kommentar, vi får vist en advarsel:

Takket være denne indikation er vi opmærksomme på problemet på forhånd og er i stand til at træffe passende handlinger for at undgå en runtime fiasko.

3. Den @NonNullFields Kommentar

Det @NonNull annotering er nyttig til at garantere nul-sikkerhed. Vi forurener dog hele kodebasen, hvis vi pryder alle ikke-nul-felter med denne kommentar.

Vi kan undgå misbrug af @NonNull med endnu en kommentar - @NonNullFields. Denne kommentar gælder på pakkeniveau og underretter vores udviklingsværktøjer om, at alle felter i den kommenterede pakke som standard ikke er nul.

Til @NonNullFields anmærkning for at sparke ind, skal vi oprette en fil med navnet pakke-info.java i rodmappen på pakken og kommentere pakken med @NonNullFields:

@NonNullFields pakke org.baeldung.nullibility;

Lad os erklære en anden ejendom i Person klasse, kaldet kaldenavn:

pakke org.baeldung.nullibility; // importerklæringer public class Person {private String nickname; ugyldigt setNickName (@Nullable String nickname) {if (nickName! = null && nickName.isEmpty ()) {nickName = null; } dette. nickname = kaldenavn; } // andre erklæringer}

Denne gang pynter vi ikke på kaldenavn felt med @NonNull men stadig se en lignende advarsel:

Det @NonNullFields annotering gør vores kode mindre detaljeret, samtidig med at det samme sikkerhedsniveau sikres som @NonNull giver.

4. Den @Nullable Kommentar

Det @NonNullFields annotering foretrækkes generelt frem for @NonNull da det hjælper med at reducere kedelpladen. Til tider vil vi undtage nogle felter fra den ikke-nul-begrænsning, der er angivet på pakkeniveau.

Lad os gå tilbage til kaldenavn felt i og dekorere det med @Nullable kommentar:

@Nullable private String nickname;

Advarslen, vi så før, er væk nu:

I denne situation, vi brugte @Nullable kommentar for at tilsidesætte semantikken i @NonNullFields på et felt.

5. Den @NonNullApi Kommentar

Det @NonNullFields kommentar gælder kun for, som navnet antyder, felter. Hvis vi vil have den samme indflydelse på metodernes parametre og returværdier, har vi brug for det @NonNullApi.

Som med @NonNullFields, skal vi specificere @NonNullApi kommentar i pakke-info.java fil:

@NonNullApi-pakke org.baeldung.nullibility;

Lad os definere en getter til kaldenavn Mark:

pakke org.baeldung.nullibility; // importerklæringer offentlig klasse Person {@Nullable private String nickname; String getNickName () {return nickname; } // andre erklæringer}

Med @NonNullApi bemærkning i virkeligheden udsendes en advarsel om en mulig nul værdi produceret af getNickName metode:

Bemærk, at ligesom @NonNullFields kommentar, vi kan tilsidesætte @NonNullApi på metodeniveau med @Nullable kommentar.

6. Konklusion

Nul-sikkerhed i foråret er en fantastisk funktion, der hjælper med at mindske muligheden for NPE'er. Der er dog to vigtige punkter, vi skal passe på, når vi bruger denne funktion:

  • Det kan kun bruges i et understøttende udviklingsværktøj, såsom IntelliJ IDEA
  • Det håndhæves ikke nul kontrollerer ved kørsel - vi skal stadig selv skrive kode for at afværge NPE'er

Kildekoden til denne vejledning kan findes på GitHub.


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