web-dev-qa-db-ja.com

すでに完成したCompletableFuture <Void>を作成する正しい方法は何ですか

Java 8でCompletableフューチャーを使用しており、受け取ったパラメーターに基づいて、副作用のある複数のタスクを並行して実行し、それらの「結合された」フューチャーを返すメソッド( 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>_のすでに完成したフューチャーを作成する別の方法が必要です。

これを行う最良の方法は何ですか?

17
Roy Menczer

Voidはインスタンス化できないため、CompletableFuture<Void>null結果でのみ完了できます。これは、join()を正常に完了すると、allOf()によって将来が返されます。

だからあなたは使うことができます

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

そのようなすでに完成した未来を得るために。

しかし、あなたも使うことができます

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

結果が依存するジョブがないことを示します。結果はまったく同じになります。

18
Holger

nullを渡すと思います:

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