3

この問題では、たとえば 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ません (そうでない場合はお知らせください)。

どうすればこの問題を解決できますか? これらは私が思いついたアプローチです:

  1. とにかくラッパーを書き、呼び出しを無視するcancel(またはスローするNotImplementedError
  2. someScalaFunctionScala または Java Future で呼び出し元によってラップされるクロージャを返すように変更します。

1. の問題は、一部のクライアントが の適切な実装に依存する可能性があることですが、cancelそれほど重要ではない可能性があります。2.本当に醜いAPIになります。

4

1 に答える 1