2016-01-21 69 views
7

在Java 8中,接口或抽象类定义返回CompletableFuture而不是返回Future的API会更好吗?考虑到it is ugly converting Future to CompletableFuture以及CompletableFuture将使调用者更直接地使用功能样式的灵活性,API可以返回Future的原因是什么?定义API时我应该返回CompletableFuture还是Future?

+0

我刚才问了这个问题2分钟前,1票已经投票了吗?寻求编程/设计选择的实际使用案例有什么不妥? – derrdji

+0

我想它有点宽泛。也许添加用例是什么? –

+0

用例是我正在设计一个做文件处理的异步API,我过去的知识告诉我要返回Future ,但是从其他的SO问题中我学习后,我觉得Java8告诉我返回CompletableFuture 。我不确定,需要帮助。 – derrdji

回答

3

我的2克拉:

  • 通过返回的未来,你有自己的选择,并可以返回一个Future,或CompletableFuture - 它没有从调用方的角度差异。
  • 通过返回一个CompletableFuture,你给调用者更多的选择(他们获得更多的方法),但你也承诺返回这种类型的未来 - 如果在两年内你意识到返回一个BetterFuture会更有意义,你将不得不改变API,这是不好的。

因此,你应该评估你将来想要返回除CompletableFuture以外的东西(哈哈)的可能性,并据此做出决定。

1

以为我会回来这一点,并提供对我的最终决定一些更新:

对于我自己的代码/设计,我就用CompletableFuture作为返回类型,因为

  • 这是一个内部部分的方法,我想使其具有可扩展性; protected abstract
  • 我不需要一个接口来定义绑定;
  • 这个返回类型的主要目的是Future(用于异步IO),我个人觉得CompletableFuture提供的功能风格的API是对未来的开发者使用功能风格的附加的好处/提示/鼓励。

有了这样说,我肯定会用CompletableStage接口作为返回类型,如果有人对我设计一个公共的API,这是因为:

相关问题