2017-10-09 50 views
4

我在java 8中使用Completable期货,我想写一个方法,基于收到的参数,并行运行多个副作用的任务,然后返回他们的“合并”未来(使用CompletableFuture.allOf()),或者什么都不做,并返回一个已经完成的未来。什么是正确的方式来创建一个已完成CompletableFuture <Void>

然而,allOf返回CompletableFuture<Void>

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

,并建立一种已经完成的将来知道使用completedFuture(),这需要一个价值的唯一方式:

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

返回一个已经用给定值完成的新的CompletableFuture。

Void是不可实例,所以我需要另一种方式来创建CompletableFuture<Void>类型的已经完成的未来。

这样做的最好方法是什么?

+2

难道你不能'CompletableFuture。 (null)'? – lexicore

回答

4

由于Void不能被实例化,你只能完成一个CompletableFuture<Void>null结果,而这正是你也将获得什么呼吁未来join()返回时通过allOf()一旦它成功完成。

所以,你可以使用

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

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

但你也可以使用

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

表示,有没有工作的结果取决于。结果将完全相同。

8

传递null我想:

CompletableFuture<Void> done = CompletableFuture.completedFuture(null); 
相关问题