Kast unntak i valgfritt i Java 8

1. Introduksjon

I denne opplæringen skal vi vise hvordan du kan kaste et tilpasset unntak når en Valgfri Jegs tømme.

Hvis du vil gå dypere inn i Valgfri, ta en titt på vår fulle guide, her.

2. Valgfritt.ellerElseThrow

Enkelt sagt, hvis verdien er til stede, da er tilstede() ville komme tilbake ekteog ringer få() vil returnere denne verdien. Ellers kaster det NoSuchElementException.

Det er også en metode orElseThrow (leverandør unntak leverandør) som lar oss tilby en tilpasset unntaksforekomst. Denne metoden vil bare returnere verdi hvis den er til stede. Ellers vil det kaste et unntak opprettet av en gitt leverandør.

3. I aksjon

Se for deg det vi har en metode som returnerer et nullbart resultat:

public String findNameById (Streng-id) {return id == null? null: "eksempelnavn"; }

Nå skal vi ringe vår findNameById (streng-id) metode to ganger og pakk resultatet inn med en Valgfri ved å bruke avNullable (T-verdi) metode.

Valgfri gir en statisk fabrikkmetode for å opprette nye forekomster. Denne metoden kalles avNullable (T-verdi). Så kan vi ringe eller ElseTrow.

Vi kan bekrefte atferden ved å kjøre denne testen:

@Test offentlig ugyldig nårIdIsNull_thenExceptionIsThrown () {assertThrows (InvalidArgumentException.class, () -> Valgfritt .ofNullable (personRepository.findNameById (null)) .orElseThrow (InvalidArgumentException :: new); }

I henhold til implementeringen vår, findNameById vil returnere null. Så det nye InvalidArgumentException vil bli kastet fra eller ElseTrow metode.

Vi kan kalle denne metoden med et ikke-null argument. Da får vi ikke noe InvalidArgumentException:

@Test offentlig ugyldig nårIdIsNonNull_thenNoExceptionIsThrown () {assertAll (() -> Valgfritt .ofNullable (personRepository.findNameById ("id")) .orElseThrow (RuntimeException :: new)); } 

4. Konklusjon

I denne raske artikkelen diskuterte vi hvordan du kan kaste et unntak fra Java 8 Valgfri.

Som alltid setter vi kildekoden på GitHub.


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