创建已完成的CompletableFuture <void>的正确方法是什么

时间:2017-10-09 08:15:55

标签: java concurrency java-8 completable-future

我在java 8中使用Completable future我想编写一个方法,根据接收到的参数,或者并行运行多个具有副作用的任务,然后返回他们的&#34;组合&#34;未来(使用CompletableFuture.allOf()),或什么都不做,并返回已经完成的未来。

但是,allOf会返回CompletableFuture<Void>

public static CompletableFuture<Void> allOf(CompletableFuture<?>... cfs)

创建已经完成的未来的唯一方法就是使用completedFuture(),它需要一个值:

public static <U> CompletableFuture<U> completedFuture(U value)
  

返回已使用给定值完成的新CompletableFuture。

Void是不可实现的,因此我需要另一种方法来创建类型为CompletableFuture<Void>的已完成的未来。

这样做的最佳方式是什么?

2 个答案:

答案 0 :(得分:11)

由于Void无法实例化,因此您只能使用CompletableFuture<Void>结果填写null,这正是您在调用join()时获得的结果。成功完成后allOf()返回的未来。

所以你可以使用

CompletableFuture<Void> cf = CompletableFuture.completedFuture(null);

获得这样一个已经完成的未来。

但你也可以使用

CompletableFuture<Void> cf = CompletableFuture.allOf();

表示结果不依赖于任何工作。结果将完全相同。

答案 1 :(得分:10)

传递null我想:

CompletableFuture<Void> done = CompletableFuture.completedFuture(null);