在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. API返回CompletionStage或CompletableFuture
- 3. 將Scala Future變成CompletableFuture
- 4. 定義流時,我應該使用val還是def?
- 5. Math.pow(0.0,0.0)返回1;應該是未定義的還是錯誤的?
- 6. 我應該返回一個空列表還是空列表?
- 7. 我應該返回null還是拋出異常?
- 8. win32消息循環 - 我應該打破還是返回?
- 9. 我應該返回一個引用還是散列?
- 10. 在CQRS中,我的閱讀方應該返回DTO還是ViewModels?
- 11. 我應該使用shared_ptr還是返回unique_ptr.get()?
- 12. 我應該返回值還是使用void?
- 13. 我應該返回501/505 HTTP狀態還是400/404
- 14. 我應該使用回調還是應該重寫屬性?
- 15. 在異步方法結束時,我應該返回還是等待?
- 16. 在Ruby中,我應該使用|| =還是定義?進行記憶?
- 17. 我應該在.pch文件還是.h文件中定義宏?
- 18. 我應該使用WordPress還是自定義?
- 19. 我應該將自定義域指向環境URL還是LoadBalancer?
- 20. 我應該使用jQuery UI完全還是自定義?
- 21. 我應該使用自定義分類還是自定義帖子類型?
- 22. Future何時可以返回未從Future中拋出的Exception?
- 23. 自定義異常類 - 我應該擴展運行時異常還是異常?
- 24. 我應該使用Unit還是捨棄我的Scala方法的返回類型?
- 25. File.Exists返回True時應該是False
- 26. Bash:$?返回1時,它應該是0
- 27. NSDateFormatter返回上午時,應該是PM
- 28. Java - instanceof返回false時,應該是true
- 29. in_array返回false時應該返回true
- 30. 自定義JSON IErrorHandler在WCF返回StatusCode 200/504何時應該返回400
我剛纔問了這個問題2分鐘前,1票已經投票了嗎?尋求編程/設計選擇的實際使用案例有什麼不妥? – derrdji
我想它有點寬泛。也許添加用例是什麼? –
用例是我正在設計一個做文件處理的異步API,我過去的知識告訴我要返回Future,但是從其他的SO問題中我學習後,我覺得Java8告訴我返回CompletableFuture 。我不確定,需要幫助。 –
derrdji