適切な型は、そのセマンティクスによって異なります。リストされているすべてのオプションは、完了を通知することを約束し、非同期的に例外を返す場合があります。
CompletableFuture<Void>:Void期待する結果がないことをユーザーに伝えます。
CompletableFuture<?>これ?は、任意の値を配信できるという意味で、contains 値の型が定義されていないことを意味します。
このCompletableFutureクラスは、 からいくつかの便利なメソッドを継承していCompletionStageます。ただし、メソッドの呼び出し元が未来の完了をトリガーすることもできます。これは、メソッドが完了自体を通知する責任があるため、間違っているようです。実行をキャンセルしないためcancel(...)、デフォルトの実装ではかなり無意味なメソッドもあります。CompletableFuture
Future<Void>:Void期待する結果がないことをユーザーに伝えます。
Future<?>これ?は、任意の値を配信できるという意味で、contains 値の型が定義されていないことを意味します。
Futureの便利なメソッドがありませんCompletionStage。フューチャーの完了をトリガーすることはできませんが、実行はキャンセルできます。
次のオプションは次のCompletionStage<Void>とおりです。
CompletionStage<Void>:Void期待する結果がないことをユーザーに伝えます。ハンドラーをバインドする便利なメソッドは存在しますが、cancel(...)メソッドはありません。メソッドの呼び出し元は、の完了をトリガーできませんCompletionStage。
<CancellableFuture extends Future<Void> & CompletionStage<Void>>Future<Void>:およびからのメソッドのセットCompletionStage<Void>。結果がないこと、便利なメソッドが存在すること、およびキャンセルするオプションがあることを示しています。メソッドの呼び出し元は、の完了をトリガーできませんCompletionStage。
メソッドの不在は、cancel(...)シナリオに適合するかどうかに関係なく可能性があります。したがって、CompletionStage<Void>キャンセルが必要ない場合は使用<CancellableFuture extends Future<Void> & CompletionStage<Void>>し、実行をキャンセルするオプションが必要な場合は使用することをお勧めします。選択した場合は、メソッド宣言に long 型の共通部分を直接配置するのではなく、継承して戻り値の型として使用<CancellableFuture extends Future<Void> & CompletionStage<Void>>するインターフェイスを自分で作成することをお勧めします。Future<Void>CompletionStage<Void>
CompletableFuture呼び出し元が Future の完了をトリガーする可能性があるため、宣言された戻り値の型で戻ることは避ける必要があります。故意にこれを行うと、コードが混乱し、予期せぬハングが発生します。これは、どのコードが完了をトリガーするかが明確でなくなるためです。上記のより制限された型のいずれかを使用して、型システムがメソッドの呼び出し元による意図しない完了のトリガーを防止できるようにします。