在這個問題中,我必須調用一個第三方Java庫,該庫需要一個java.util.concurrent.Future
,其結果來自Scala例程返回scala.concurrent.Future
,例如。Scala和Java互操作。未來
def someScalaFunction(): scala.concurrent.Future[T]
def otherJavaMethod(arg: java.util.concurrent.Future[T]) = ...
我想包斯卡拉,未來進入一個新的Java的未來,但有沒有辦法實現它中斷包裹斯卡拉 - 未來的方式Java的未來方法def cancel(mayInterruptIfRunning: Boolean): Boolean
(否則請讓我知道)。
我該如何解決這個問題?這是我想出的辦法:
- 寫在包裝反正,只是忽略
cancel
通話(或拋出NotImplementedError
) - 變化
someScalaFunction
到可能返回關閉然後將由呼叫者包裹在Scala或Java未來中。
1.的問題是某些客戶端可能依賴於cancel
的正確實施,但可能不是非常關鍵。 2.會導致一個非常醜陋的api。