scala - 为什么它不能识别 asScala 方法?
问题描述
我有以下代码,无法编译:
import akka.NotUsed
import akka.actor.typed.Behavior
import akka.actor.typed.scaladsl.Behaviors
import akka.pattern.FutureRef
import akka.stream.scaladsl._
import akka.stream.typed.scaladsl.ActorMaterializer
import org.apache.kafka.clients.admin._
import scala.jdk.FutureConverters._
import scala.concurrent.{ExecutionContext, Future}
import scala.concurrent.duration
object KafkaDetectorActor {
val create: Behavior[NotUsed] = Behaviors.setup { context =>
implicit val system = context.system
implicit val materializer = ActorMaterializer()
implicit val dispatcher = context.system.dispatchers
Behaviors.same
}
private def health(server: String)(implicit executor: ExecutionContext): Future[Boolean] = {
val props = new Properties
props.put(AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG, server)
props.put(AdminClientConfig.CONNECTIONS_MAX_IDLE_MS_CONFIG, "10000")
props.put(AdminClientConfig.REQUEST_TIMEOUT_MS_CONFIG, "5000")
AdminClient
.create(props)
.listTopics()
.names()
.asScala
}
哪里names
返回KafkaFuture[java.util.Set[String]]
。
它不识别asScala
方法。库scala.jdk.FutureConverters._
已导入。我究竟做错了什么?
解决方案
scala.jdk.FutureConverters
操作所以CompletableFuture
先尝试转换 KafkaFuture
成这样CompletableFuture
implicit class KafkaFutureToCompletableFuture[T](kafkaFuture: KafkaFuture[T]) {
def toCompletableFuture: CompletableFuture[T] = {
val wrappingFuture = new CompletableFuture[T]
kafkaFuture.whenComplete((value, throwable) => {
if (throwable != null) {
wrappingFuture.completeExceptionally(throwable)
}
else {
wrappingFuture.complete(value)
}
})
wrappingFuture
}
}
现在我们可以调用toCompletableFuture.asScala
. 例如,
import scala.jdk.FutureConverters._
KafkaFuture.completedFuture(42).toCompletableFuture.asScala.foreach(println)
输出42
。在你的情况下,试试
AdminClient
.create(props)
.listTopics()
.names()
.toCompletableFuture
.asScala
推荐阅读
- html - 将 bookdown 文件夹发布到 Microsoft 团队
- javafx - 切换 TitledPane 的适配器
- git - 使用 git 时更改文件结构
- google-colaboratory - 发生这种情况时,我正试图使用 OpenAI 点唱机
- java - Java中的多个套接字
- razor - SelectList(Model.RoleDropDownDisp,"RoleId","RoleName") 导致 ArgumentNullException:值不能为空。(参数“项目”)
- apache - .htaccess 文件子文件夹重定向
- php - 最新访问的模块无法正常工作
- c# - 如何从另一个窗口编辑文本框
- c - FreeRTOS 两个 CPU 时钟