Лучший способ преобразовать будущее Java в будущее Twitter - PullRequest
0 голосов
/ 14 февраля 2020

В моем приложении я конвертирую java .concurrent.future в Twitter Future следующим образом:

val myTwitterFuture = FuturePool.unboundedPool{ myJavaFuture.get}

Это правильный способ или есть предпочтительный метод?

1 Ответ

1 голос
/ 14 февраля 2020

Если ваше Java будущее - просто java.util.concurrent.Future, то то, что у вас есть, в основном лучшее, что вы можете сделать, потому что это очень плохой тип. Если у вас есть java.util.concurrent.CompletableFuture, вы в основном комбинируете ответы на , конвертируете его в scala.concurrent.Future и конвертируете Scala будущее в будущее Twitter :

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 }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...