代码之家  ›  专栏  ›  技术社区  ›  Roy Menczer

创建已完成的CompletableFuture<Void>

  •  34
  • Roy Menczer  · 技术社区  · 8 年前

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

    然而 allOf 返回a CompletableFuture<Void> :

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

    创造一个已知的已经完成的未来的唯一途径是使用 completedFuture() ,期望值为:

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

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

    Void 是不稳定的,所以我需要另一种方法来创建类型为的已经完成的未来 可完成的未来<Void> .

    最好的方法是什么?

    2 回复  |  直到 8 年前
        1
  •  51
  •   Holger    8 年前

    自从 Void 无法实例化,只能完成一个 CompletableFuture<Void> null join() 关于未来 allOf()

    所以你可以使用

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

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

    但你也可以使用

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

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

        2
  •  14
  •   Eugene    8 年前

    通过a null 我想:

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