Lancer une exception en option dans Java 8

1. Introduction

Dans ce tutoriel, nous allons montrer comment lancer une exception personnalisée lorsqu'une option i est vide.

Si vous souhaitez approfondir vos connaissances en option, consultez notre guide complet, ici.

2. Facultatif.ouElseThrow

En termes simples, si la valeur est présente, alors isPresent () renverra true et l'appel de get () renverra cette valeur. Sinon, il lève NoSuchElementException .

Il existe également une méthode orElseThrow (Supplier exceptionSupplier) qui nous permet de fournir une instance Exception personnalisée. Cette méthode retournera une valeur uniquement si elle est présente. Sinon, cela lèvera une exception créée par un fournisseur fourni.

3. En action

Imaginons que nous ayons une méthode qui renvoie un résultat Nullable:

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

Nous allons maintenant appeler notre méthode findNameById (String id) deux fois et envelopper le résultat avec un Optional en utilisant la méthode ofNullable (T value) .

Facultatif fournit une méthode de fabrique statique pour créer de nouvelles instances . Cette méthode est appelée ofNullable (valeur T) . Ensuite, nous pouvons appeler orElseThrow.

Nous pouvons vérifier le comportement en exécutant ce test:

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

Selon notre implémentation, findNameById renverra null . Ainsi, la nouvelle InvalidArgumentException sera levée à partir de la méthode orElseThrow .

Nous pouvons appeler cette méthode avec un argument non nul. Ensuite, nous n'obtiendrons pas une exception InvalidArgumentException:

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

4. Conclusion

Dans cet article rapide, nous avons expliqué comment lever une exception à partir de Java 8 Facultatif.

Comme toujours, nous mettons le code source sur notre GitHub.