Exception de projection facultative dans Java 8

Exception de projection facultative dans Java 8

1. introduction

Dans ce didacticiel, nous allons montrer comment lever une exception personnalisée lorsqu'unOptional isest vide.

Si vous voulez approfondir votre participation àOptional, , jetez un œil à nosguide complets, ici.

2. Optional.orElseThrow

En termes simples, si la valeur est présente, alorsisPresent() renverraittrue, et l'appel deget() will renverra cette valeur. Sinon, il lanceNoSuchElementException.

Il existe également une méthodeorElseThrow(Supplier<? extends X> exceptionSupplier) qui nous permet de fournir une instance d'exception personnalisée. Cette méthode renverra une valeur uniquement si elle est présente. Sinon, il lèvera une exception créée par un fournisseur fourni.

3. En action

Imaginez quewe have a method which returns a nullable result:

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

Nous allons maintenant appeler notre méthodefindNameById(String id) deux fois et envelopper le résultat avec unOptional en utilisant la méthodeofNullable(T value).

Optional provides a static factory method for creating new instances Cette méthode est appeléeofNullable(T value). Ensuite, nous pouvons appelerorElseThrow.

Nous pouvons vérifier le comportement en lançant ce test:

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

Selon notre implémentation,findNameById will returnnull. Ainsi, le nouveauInvalidArgumentException will sera jeté de la méthode orElseThrow .

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

@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 8Optional. 

Comme toujours, nous mettons le code sourceon our GitHub.