Java >> Java tutorial >  >> Tag >> throw

Smid undtagelse i valgfrit i Java 8

1. Introduktion

I dette selvstudie skal vi vise, hvordan du kaster en tilpasset undtagelse, når en Valgfri is tom.

Hvis du vil gå dybere ind i Valgfrit,  se vores fulde guide her.

2. Optional.orElseThrow

Kort sagt, hvis værdien er til stede, så isPresent() ville returnere true , og kalder get()  vil returnere denne værdi. Ellers kaster den NoSuchElementException .

Der er også en metode orElseThrow(Supplier exceptionSupplier) der giver os mulighed for at levere en tilpasset undtagelsesforekomst. Denne metode returnerer kun værdi, hvis den er til stede. Ellers vil det kaste en undtagelse oprettet af en angivet leverandør.

3. I aktion

Forestil dig, at vi har en metode, der returnerer et nullbart resultat:

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

Nu vil vi kalde vores findNameById(String id) metode to gange, og indpak resultatet med en Valgfri ved at bruge ofNullable(T-værdi) metode.

Valgfrit giver en statisk fabriksmetode til at oprette nye forekomster . Denne metode kaldes ofNullable(T-værdi) . Så kan vi kalde orElseThrow.

Vi kan bekræfte adfærden ved at køre denne test:

@Test
public void whenIdIsNull_thenExceptionIsThrown() {
    assertThrows(InvalidArgumentException.class, () -> Optional
      .ofNullable(personRepository.findNameById(null))
      .orElseThrow(InvalidArgumentException::new));
}

I henhold til vores implementering, findNameById  vil returnere null . Så den nye InvalidArgumentException  vil blive smidt fra  orElseThrow  metode.

Vi kan kalde denne metode med et ikke-nul argument. Så får vi ikke en InvalidArgumentException:

@Test
public void whenIdIsNonNull_thenNoExceptionIsThrown() {
    assertAll(() -> Optional
      .ofNullable(personRepository.findNameById("id"))
      .orElseThrow(RuntimeException::new));
}

4. Konklusion

I denne hurtige artikel diskuterede vi, hvordan man kaster en undtagelse fra Java 8 Valgfrit.

Som altid lægger vi kildekoden på vores GitHub.


Java tag