我正在使用我的scala代码中的java库返回CompletableFuture。
https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html
我必须将其转换为TwitterFuture
https://twitter.github.io/util/guide/util-cookbook/futures.html
当然,我可以将CompletableFuture转换为ScalaFuture,然后将ScalaFuture转换为TwitterFuture。但那是浪费。
我可以将CompletableFuture直接转换为TwitterFuture。
答案 0 :(得分:1)
目前尚不清楚你究竟要求的是什么。某些库中有哪些标准方法? Twitter Bijection显然是寻找它的地方,似乎没有CompletionStage
或CompletableFuture
如果你想要代码,那么@Dima是对的 - 自己编写它并不难,比如
import java.util.concurrent.CompletionStage
import java.util.function.BiConsumer
import com.twitter.util.{Future => TwitterFuture, Promise => TwitterPromise}
implicit class JavaCompletionStageTwitterOps[A](val jcs: CompletionStage[A]) extends AnyVal {
def asTwitter(implicit e: ExecutionContext): TwitterFuture[A] = {
val promise = new TwitterPromise[A] with BiConsumer[A, Throwable] {
override def accept(value: A, ex: Throwable): Unit = {
if (ex == null) this.setValue(value)
else this.setException(ex)
}
}
jcs.whenComplete(promise)
promise
}
}