在Java 8中,接口或抽象类定义返回CompletableFuture
而不是返回Future
的API会更好吗?考虑到it is ugly converting Future
to CompletableFuture
以及CompletableFuture
将使调用者更直接地使用功能样式的灵活性,API可以返回Future
的原因是什么?定义API时我应该返回CompletableFuture还是Future?
7
A
回答
3
我的2克拉:
- 通过返回的未来,你有自己的选择,并可以返回一个Future,或CompletableFuture - 它没有从调用方的角度差异。
- 通过返回一个CompletableFuture,你给调用者更多的选择(他们获得更多的方法),但你也承诺返回这种类型的未来 - 如果在两年内你意识到返回一个BetterFuture会更有意义,你将不得不改变API,这是不好的。
因此,你应该评估你将来想要返回除CompletableFuture以外的东西(哈哈)的可能性,并据此做出决定。
1
以为我会回来这一点,并提供对我的最终决定一些更新:
对于我自己的代码/设计,我就用CompletableFuture
作为返回类型,因为
- 这是一个内部部分的方法,我想使其具有可扩展性;
protected abstract
- 我不需要一个接口来定义绑定;
- 这个返回类型的主要目的是Future(用于异步IO),我个人觉得
CompletableFuture
提供的功能风格的API是对未来的开发者使用功能风格的附加的好处/提示/鼓励。
有了这样说,我肯定会用CompletableStage
接口作为返回类型,如果有人对我设计一个公共的API,这是因为:
- 什么@assylias和@Holger说一下接口与实现和链接能力
- 和事实
CompletableStage
有一个方法CompletableFuture<T> toCompletableFuture()
。
相关问题
- 1. 我应该返回List还是ArrayList
- 2. 将Scala Future变成CompletableFuture
- 3. 我应该返回501/505 HTTP状态还是400/404
- 4. 在CQRS中,我的阅读方应该返回DTO还是ViewModels?
- 5. 我应该使用shared_ptr还是返回unique_ptr.get()?
- 6. 我应该返回null还是抛出异常?
- 7. 我应该返回一个引用还是散列?
- 8. 我应该使用回调还是应该重写属性?
- 9. 我应该将自定义域指向环境URL还是LoadBalancer?
- 10. 我应该使用WordPress还是自定义?
- 11. 我应该使用jQuery UI完全还是自定义?
- 12. 在Ruby中,我应该使用|| =还是定义?进行记忆?
- 13. 我应该使用自定义分类还是自定义帖子类型?
- 14. File.Exists返回True时应该是False
- 15. 我应该使用Unit还是舍弃我的Scala方法的返回类型?
- 16. in_array返回false时应该返回true
- 17. 自定义JSON IErrorHandler在WCF返回StatusCode 200/504何时应该返回400
- 18. 应该IDataErrorInfo.Error返回所有错误还是仅返回属性级错误?
- 19. 返回语句应该在锁内还是外?
- 20. 函数应该返回引用还是对象?
- 21. 这个Json结果应该返回一个404还是200?
- 22. 我应该从函数中返回一个数组还是一个集合?
- 23. 我应该将IList还是List返回给MVC中的控制器?
- 24. NSCopying和copyWithZone: - 他们应该返回[自我保留]还是其他?
- 25. 我的帮助器方法应该返回一个字符还是字符串?
- 26. 我的持久化类应该返回Option还是依赖于异常?
- 27. 我fileExistsAtPath语句返回false时,它应该是真实的
- 28. nodejs调用API并返回该响应
- 29. 我应该使用RouteParameter还是UrlParameter作为Asp.NET web-api路由?
- 30. 我应该使用Twitter API还是仅仅使用RSS Feed?
我刚才问了这个问题2分钟前,1票已经投票了吗?寻求编程/设计选择的实际使用案例有什么不妥? – derrdji
我想它有点宽泛。也许添加用例是什么? –
用例是我正在设计一个做文件处理的异步API,我过去的知识告诉我要返回Future,但是从其他的SO问题中我学习后,我觉得Java8告诉我返回CompletableFuture 。我不确定,需要帮助。 –
derrdji