【发布时间】:2013-04-11 21:01:10
【问题描述】:
在这个问题中,我必须调用一个第三方 Java 库,该库需要一个 java.util.concurrent.Future,其结果来自一个 Scala 例程,例如返回一个 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。
【问题讨论】:
标签: java scala scala-collections scala-2.10 scala-java-interop