I have a generated java interface containing a method:
public Future> getCustomersAsync(AsyncHandler asyncHandler);
I w
Well its not practical to convert them, because scala Future
do not provide functionality to interrupt or any other mechanism for cancellation. So there is no direct full-proof way to cancel a future via interruption or otherwise via method call in Future.
So the simplest solution can be if cancellation is not desired would be:
def convert[T](x:Future[T]):java.util.concurrent.Future[T]={
new concurrent.Future[T] {
override def isCancelled: Boolean = throw new UnsupportedOperationException
override def get(): T = Await.result(x, Duration.Inf)
override def get(timeout: Long, unit: TimeUnit): T = Await.result(x, Duration.create(timeout, unit))
override def cancel(mayInterruptIfRunning: Boolean): Boolean = throw new UnsupportedOperationException
override def isDone: Boolean = x.isCompleted
}
}
But in case if you still need cancel
, a handicapped fix would be as shown
here. But I wouldn't recommend it though as its shaky