What is the correct way to create an already-completed CompletableFuture<Void>
Solution 1
Since Void
can not be instantiated, you can only complete a CompletableFuture<Void>
with a null
result, which is exactly what you also will get when calling join()
on the future returned by allOf()
once it has been successfully completed.
So you can use
CompletableFuture<Void> cf = CompletableFuture.completedFuture(null);
to get such an already completed future.
But you can also use
CompletableFuture<Void> cf = CompletableFuture.allOf();
to denote that there are no jobs the result depends on. The result will be exactly the same.
Solution 2
pass a null
I guess:
CompletableFuture<Void> done = CompletableFuture.completedFuture(null);
Roy Menczer
Updated on June 03, 2022Comments
-
Roy Menczer almost 2 years
I am using Completable futures in java 8 and I want to write a method that, based on a received parameter, either runs multiple tasks with side effects in parallel and then return their "combined" future (using
CompletableFuture.allOf()
), or does nothing and returns an already-completed future.However,
allOf
returns aCompletableFuture<Void>
:public static CompletableFuture<Void> allOf(CompletableFuture<?>... cfs)
And the only way to create an already-completed future that know is using
completedFuture()
, which expects a value:public static <U> CompletableFuture<U> completedFuture(U value)
Returns a new CompletableFuture that is already completed with the given value.
and
Void
is uninstantiable, so I need another way to create an already-completed future of typeCompletableFuture<Void>
.What is the best way to do this?