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 instances. Diese 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.