gpt4 book ai didi

java - 斯卡拉 future : How to guarantee a non-null result?

转载 作者:行者123 更新时间:2023-11-29 07:26:28 25 4
gpt4 key购买 nike

假设我有一个返回 CompleteableFuture[Data] 的方法:

def doIt(): CompleteableFuture[Data] = { ... }

而且,doIt() 返回 null 的可能性非零。我们如何在不阻塞调用线程的情况下调用 doIt() 直到结果不是 null? Scala 中的方法是什么?

我目前的尝试:

Future {
var data: Data = null
blocking {
while (data == null) { data = doIt().get }
}
data
}

我不想使用blockingget。有什么想法吗?

此外,还有 map 事后对这个 Future 的调用:

val myFuture = Future {
var data: Data = null
blocking {
while (data == null) { data = doIt().get }
}
data
}.map { d => d.someMember }

d.someMember 将抛出一个 NullPointerException 除非我们确保第一个 Future 有一个非空结果。

最佳答案

使用 https://github.com/scala/scala-java8-compat :

import scala.compat.java8.FutureConverters._

def doItNotNull: Future[Data] =
doIt.toScala.flatMap {result =>
if (result == null) doItNotNull // try again
else Future.successful(result) // wrap in a completed future
}

关于java - 斯卡拉 future : How to guarantee a non-null result?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51696046/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com