将Java CompletableFuture转换为TwitterFuture(没有任何中间的Future)

时间:2018-01-01 19:39:47

标签: java scala

我正在使用我的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。

1 个答案:

答案 0 :(得分:1)

目前尚不清楚你究竟要求的是什么。某些库中有哪些标准方法? Twitter Bijection显然是寻找它的地方,似乎没有CompletionStageCompletableFuture

的引用

如果你想要代码,那么@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
  }
}