Ich habe seltsames Verhalten der Java 8 CompletableFuture.exceptionally Methode begegnet. Wenn ich diesen Code ausführen, funktioniert es gut und Drucke java.lang.RuntimeException
Überraschendes Verhalten von Java 8 CompletableFuture ausnahmsweise Methode
CompletableFuture<String> future = new CompletableFuture<>();
future.completeExceptionally(new RuntimeException());
future.exceptionally(e -> {
System.out.println(e.getClass());
return null;
});
Aber wenn ich einen weiteren Schritt in die Zukunft Verarbeitung hinzufügen, wie thenApply
die Ausnahmetyp Änderungen java.util.concurrent.CompletionException
mit der ursprünglichen Ausnahme innen gewickelt.
CompletableFuture<String> future = new CompletableFuture<>();
future.completeExceptionally(new RuntimeException());
future.thenApply(v-> v).exceptionally(e -> {
System.out.println(e);
return null;
});
Gibt es einen Grund, warum dies passieren sollte? Meiner Meinung nach ist das ziemlich überraschend.