2017-01-26 16 views
2

APIを構築する際には、インターフェイスにコードを書くことをお勧めします。これは、CompletionStageを返すのが最善のアプローチのようです。しかし、私はCompletionStageを取得した後で常に.toCompletableFutureを呼び出すことに気付きました。この場合、推奨されるアプローチは何ですか?APIはCompletionStageまたはCompletableFutureを返す必要があります

+0

それは*なぜ* toCompletableFuture()を呼び出しているかによって決まります... – Holger

+0

@Holgerあなたはそれについて詳述できますか?私たちはtoCompletableFutureを呼び出すので、その中でしか利用できないメソッドを呼び出すことができます。インターフェイスから具体的なインスタンスを得ることができるところで、混乱することはほとんどありません。彼らは密接に結びついており、インターフェースを持つという目的を破っています。 – Mayumi

+0

さて、 'CompletionStage'は38のメソッドを定義し、' Future'インターフェースはさらに5つを定義します。残りの8つの「CompletableFuture」固有のメソッドが永久に(「常に」)見つかった場合、インターフェイスに対してコーディングすることは、実際にはあなたのためではありません。 – Holger

答えて

2

CompletionStageを使用するAPIは非ブロッキングのためのものです。したがって、呼び出し元が非ブロッキングの方法で動作しない場合は、.toCompletableFuture()という呼び出しが必要です。 APIがノンブロッキングでない場合は、古い古いFutureインターフェイスを返す必要があります。ホルガーは、なぜあなたはtoCompletableFutureを呼ぶのですか、尋ね同様

+0

逆の観点からの質問も参照してください。https://stackoverflow.com/q/34930840/1531945 –

0

https://stackoverflow.com/a/49158702/1113842

で私の返事を参照してください?

  • 発信者にcomplete/cancelに発信しますか?ほとんどのアプリケーションでは、ステージを完了するための独自のメカニズムが用意されています。したがって、これらのメソッドを公開する必要はありません。
  • ブロックgetを使用しますか?これは、非同期プログラミングでは避けるべきです。

回答が両方の質問に対して「いいえ」でない場合は、CompletionStageを返す必要があります。

関連する問題