【问题标题】:Best way to convert a Java Future to a Twitter Future将 Java Future 转换为 Twitter Future 的最佳方法
【发布时间】:2020-02-15 04:44:52
【问题描述】:

在我的应用程序中,我将 java.concurrent.future 转换为 Twitter Future,如下所示:

val myTwitterFuture = FuturePool.unboundedPool{ myJavaFuture.get}

这是正确的方法,还是有首选方法?

【问题讨论】:

  • 只是Future 还是CompletableFuture
  • 老实说,并不是 100% 确定对这些人会有什么不同

标签: scala twitter-util


【解决方案1】:

如果你的 Java 未来只是一个java.util.concurrent.Future,那么你所拥有的基本上是你能做的最好的,因为它是一个非常糟糕的类型。如果你有java.util.concurrent.CompletableFuture,你基本上把convert it to a scala.concurrent.Futureconvert Scala future to a Twitter future的答案结合起来:

import java.util.concurrent.{Future => JFuture, CompletableFuture}
import com.twitter.util.{Future => TwitterFuture, Promise => TwitterPromise}
import scala.util.{Success, Failure}

implicit class FutureWrapper[A](private val jf: JFuture[A]) extends AnyVal {
  def asTwitter: TwitterFuture[A] = jf match {
    case jf: CompletableFuture[A] =>
      val promise = new TwitterPromise[A]()
      jf.whenComplete { (result, exception) =>
        if (exception != null)
          promise.setException(exception)
        else
          promise.setValue(result)
      }
      promise
    case _ =>
      FuturePool.unboundedPool{ jf.get }
  }
}

【讨论】:

    猜你喜欢
    • 2015-07-30
    • 2016-05-04
    • 2013-12-20
    • 2019-10-25
    • 1970-01-01
    • 2017-01-27
    • 2011-11-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多