我在
java 8中使用Completable future我想编写一个方法,根据接收到的参数,并行运行多个具有副作用的任务,然后返回它们的“组合”未来(使用CompletableFuture.allOf()),或者什么都不做,并回归已经完成的未来.
@H_403_2@但是,allOf返回CompletableFuture< Void>:
public static CompletableFuture<Void> allOf(CompletableFuture<?>... cfs)@H_403_2@创建已经完成的未来的唯一方法就是使用completedFuture(),它需要一个值:
public static <U> CompletableFuture<U> completedFuture(U value)
@H_403_2@Returns a new CompletableFuture that is already completed with the given value.@H_403_2@和Void是不可实现的,所以我需要另一种方法来创建CompletableFuture< Void>类型已经完成的未来. @H_403_2@做这个的最好方式是什么?
解决方法
由于Void无法实例化,因此您只能完成CompletableFuture< Void>使用null结果,这正是在成功完成allOf()返回的未来调用join()时也会得到的结果.
@H_403_2@所以你可以使用
CompletableFuture<Void> cf = CompletableFuture.completedFuture(null);@H_403_2@获得这样一个已经完成的未来. @H_403_2@但你也可以使用
CompletableFuture<Void> cf = CompletableFuture.allOf();@H_403_2@表示没有结果取决于的工作.结果将完全相同.