我在java 8中使用Completable future我想编写一个方法,根据接收到的参数,或者并行运行多个具有副作用的任务,然后返回他们的"组合"未来(使用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>
的已完成的未来。
这样做的最佳方式是什么?
答案 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);