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

最佳答案

目前尚不清楚您到底要什么。一些库中的一些标准方法? 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
  }
}

关于java - 将Java CompletableFuture转换为TwitterFuture(无任何中间Future),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48052679/

10-13 09:46