この問題では、たとえば as をjava.util.concurrent.Future
返す Scala ルーチンからの結果を期待するサードパーティの Java ライブラリを呼び出す必要があります。scala.concurrent.Future
def someScalaFunction(): scala.concurrent.Future[T]
def otherJavaMethod(arg: java.util.concurrent.Future[T]) = ...
Scala-Future を新しい Java-Future にラップしますが、ラップされた Scala-Future を中断する方法で Java-Future メソッドを実装する方法はありdef cancel(mayInterruptIfRunning: Boolean): Boolean
ません (そうでない場合はお知らせください)。
どうすればこの問題を解決できますか? これらは私が思いついたアプローチです:
- とにかくラッパーを書き、呼び出しを無視する
cancel
(またはスローするNotImplementedError
) someScalaFunction
Scala または Java Future で呼び出し元によってラップされるクロージャを返すように変更します。
1. の問題は、一部のクライアントが の適切な実装に依存する可能性があることですが、cancel
それほど重要ではない可能性があります。2.本当に醜いAPIになります。