Genera eccezione in Opzionale in Java 8

1. Introduzione

In questo tutorial, stiamo andando a mostrare come organizzare un'eccezione personalizzata quando un optional i s vuota.

Se vuoi approfondire l' Operativo, dai un'occhiata alla nostra guida completa, qui.

2. Optional.oElseThrow

In poche parole, se il valore è presente, isPresent () restituirà true e la chiamata a get () restituirà questo valore. In caso contrario, genera NoSuchElementException .

C'è anche un metodo orElseThrow (Supplier exceptionSupplier) che ci consente di fornire un'istanza di eccezione personalizzata. Questo metodo restituirà valore solo se è presente. In caso contrario, verrà generata un'eccezione creata da un fornitore fornito.

3. In azione

Immagina di avere un metodo che restituisce un risultato nullable:

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

Ora chiameremo due volte il nostro metodo findNameById (String id) e racchiuderemo il risultato in un Optional utilizzando il metodo ofNullable (T value) .

Facoltativo fornisce un metodo factory statico per la creazione di nuove istanze . Questo metodo è chiamato ofNullable (valore T) . Quindi possiamo chiamare orElseThrow.

Possiamo verificare il comportamento eseguendo questo test:

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

Secondo la nostra implementazione, findNameById restituirà null . Quindi la nuova InvalidArgumentException verrà generata dal metodo orElseThrow .

Possiamo chiamare questo metodo con un argomento non nullo. Quindi, non avremo un'eccezione InvalidArgumentException:

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

4. Conclusione

In questo rapido articolo, abbiamo discusso come lanciare un'eccezione da Java 8 Opzionale.

Come sempre, inseriamo il codice sorgente nel nostro GitHub.