在这个问题中,我必须调用一个第三方 Java 库,该库期望 ajava.util.concurrent.Future
具有来自 Scala 例程的结果scala.concurrent.Future
,例如返回 a 。
def someScalaFunction(): scala.concurrent.Future[T]
def otherJavaMethod(arg: java.util.concurrent.Future[T]) = ...
我会将 Scala-Future 包装到一个新的 Java-Future 中,但是没有办法以def cancel(mayInterruptIfRunning: Boolean): Boolean
中断包装的 Scala-Future 的方式实现 Java-Future 方法(否则请告诉我)。
我怎么解决这个问题?这些是我想出的方法:
- 无论如何都要编写包装器,然后忽略调用
cancel
(或抛出NotImplementedError
) - 更改
someScalaFunction
为可能返回一个闭包,然后由调用者将其包装在 Scala 或 Java Future 中。
1. 的问题是某些客户端可以依赖正确的实现,cancel
但可能不是很关键。2.会导致一个非常丑陋的api。