2016-01-21 47 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,這是因爲:

相關問題