Ausnahme in optional werfen in Java 8

Ausnahmebedingung in Optional in Java 8 auslösen

1. Einführung

In diesem Tutorial zeigen wir, wie eine benutzerdefinierte Ausnahme ausgelöst wird, wennOptional isleer ist.

Wenn Sie tiefer inOptional, einsteigen möchten, sehen Sie sich hier unsere vollständigenguidean.

2. Optional.orElseThrow

Einfach ausgedrückt, wenn der Wert vorhanden ist, würdeisPresent()true zurückgeben, und das Aufrufen vonget() will würde diesen Wert zurückgeben. Andernfalls wirdNoSuchElementException ausgelöst.

Es gibt auch eine MethodeorElseThrow(Supplier<? extends X> exceptionSupplier), mit der wir eine benutzerdefinierte Ausnahmeinstanz bereitstellen können. Diese Methode gibt nur dann einen Wert zurück, wenn er vorhanden ist. Andernfalls wird eine Ausnahme ausgelöst, die von einem angegebenen Lieferanten erstellt wurde.

3. In Aktion

Stellen Sie sich vor, dasswe have a method which returns a nullable result:

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

Jetzt rufen wir unserefindNameById(String id)-Methode zweimal auf und schließen das Ergebnis mitOptional ab, indem wir dieofNullable(T value)-Methode verwenden.

Optional provides a static factory method for creating new instancesDiese Methode heißtofNullable(T value). Dann können wirorElseThrow. aufrufen

Wir können das Verhalten überprüfen, indem wir diesen Test ausführen:

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

Gemäß unserer Implementierung wirdfindNameById null zurückgeben. Das neueInvalidArgumentException wird also aus der orElseThrow method geworfen.

Wir können diese Methode mit einem Argument ungleich Null aufrufen. Dann erhalten wir keineInvalidArgumentException:

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

4. Fazit __

In diesem kurzen Artikel haben wir erläutert, wie eine Ausnahme von Java 8Optional. ausgelöst wird

Wie immer setzen wir den Quellcodeon our GitHub.