我正在使用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是查找它的明显位置,似乎没有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
}
}
关于java - 将Java CompletableFuture转换为TwitterFuture(无任何中间Future),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48052679/