September 2019
Intermediate to advanced
816 pages
18h 47m
English
User problem: Compute the total of an order. If something goes wrong then throw an IllegalStateException.
Sometimes we want to execute an exceptional block of code even if an exception did not occur. Like the finally clause of a try-catch block. This is possible using the handle() callback. This method is called whether or not an exception occurred, and is somehow like a catch + finally. It takes a function used to compute the value of the returned CompletionStage, BiFunction<? super T,Throwable,? extends U> and returns CompletionStage<U> (U is the function's return type).
Let's see it at work:
public static void fetchOrderTotalHandle() { CompletableFuture<Integer> totalOrder = CompletableFuture.supplyAsync(() ...