API应该返回CompletionStage还是CompletableFuture?

4
在构建 API 时,最好编写接口代码。因此似乎返回 CompletionStage 是最佳方法。但我发现在获取 CompletionStage 后,我总是调用 .toCompletableFuture。在这种情况下,推荐采用什么方法?

1
这取决于你为什么总是调用 toCompletableFuture() - Holger
@Holger,你能详细说明一下吗?我们正在调用toCompletableFuture,以便调用仅在其中可用的方法。感觉有点混乱,我们从接口中可以获取具体实例。它们紧密耦合并且违背了拥有接口的目的。 - user_1357
CompletionStage 定义了38个方法,而 Future 接口定义了另外五个。如果你总是需要剩下的八个 CompletableFuture 特定方法,那么针对接口进行编码确实不适合你。 - Holger
2个回答

8
请看我在https://dev59.com/s1YN5IYBdhLWcg3wV3BX#49158702的回复。
像Holger所问,你为什么要调用toCompletableFuture
  • 你想让调用者complete/cancel它吗?大多数应用程序提供自己的机制来完成阶段。因此,没有必要公开这些方法。
  • 你想使用阻塞的get吗?这应该在异步编程中避免使用。
如果两个问题的答案都是否定的,那么你应该返回CompletionStage

3

使用CompletionStage的API是用于非阻塞使用的,因此只有在调用方不以非阻塞方式工作时才需要调用.toCompletableFuture()

如果API不是非阻塞的,则应返回普通的Future接口。


请参见相反角度的问题 https://dev59.com/IFsW5IYBdhLWcg3wfXNa - Konstantin Pelepelin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接