適切なタイプは意味に依存します。リストされたすべてのオプションは、完了を通知することを約束し、例外を非同期的に返すことがあります。
CompletableFuture<Void>
:Void
は、予想される結果がないことをユーザに伝えます。
?
は、任意の値を配信できるという意味で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>>
を使用することをお勧めします。 <CancellableFuture extends Future<Void> & CompletionStage<Void>>
を選択した場合、メソッド宣言に直接ロングタイプの交差を置くのではなく、戻り値の型としてFuture<Void>
とCompletionStage<Void>
を継承するインターフェイスを自分で作成することをお勧めします。
呼び出し元が将来の完了をトリガーする可能性があるため、宣言された戻り値タイプCompletableFuture
での戻りは避けてください。意図的にコードを混乱させると驚くほどハングすることになります。これは、どのコードが完了をトリガーするのかがはっきりしないためです。型システムが意図しない完了をトリガーするのを防ぐには、上記のより限定された型のうちの1つを使用します。
私は将来がであることがわかります。将来は未来のものであると明示的に述べています。将来の>は未知の未来だと言います。 –
Java 6 to Java 7の変更点、[ここ](http://stackoverflow.com/a/12962219/438154)を参照してください。 –