gpt4 book ai didi

java - 类型将 : Map[String, String] 转换为 Map[String,Object]

转载 作者:行者123 更新时间:2023-12-02 12:09:06 27 4
gpt4 key购买 nike

我是 scala 新手,当我编译我的 SBT 项目时,我看到了这个异常:

[error] C:\dev\reactive-rabbit\src\main\scala\io\scalac\amqp\impl\RabbitConnection.scala:58: type mismatch;
[error] found : Map[String,String] (in scala.collection.immutable)
[error] required: Map[String,Object] (in java.util)
[error] future(onChannel(_.exchangeBind(destination, source, routingKey, arguments)))
[error] ^

我最近将已弃用的 JavaConversions 库替换为 JavaConverters。我的代码如下所示:

import scala.collection.JavaConvertors._
override def exchangeBind(destination: String, source: String, routingKey: String,
arguments: Map[String, String]) =
future(onChannel(_.exchangeBind(destination, source, routingKey, arguments)))
.map(_ ⇒ Exchange.BindOk())

我查看了 onChannel() 的合约,其 arguments 参数需要类型 Map[String, Object] (java 集合),但是我向它传递一个 Map[String, String] (scala 不可变)。如何在将参数传递给方法时更改该参数的数据类型?谢谢。

最佳答案

Scala Map 在值类型参数中是协变的,因此 Map[String, String] 已经是 Map[String, Object],否mapmapValues 必要。您可以将其分配给具有所需类型的 val 或使用类型描述:arguments: Map[String, Object]。然后调用asJava:

(arguments: Map[String, Object]).asJava

请注意,在不必要的地方使用 asInstanceOf ,就像其他答案一样,是一种不好的风格:如果您稍后更改类型,编译器无法告诉您代码需要更改的位置。

关于java - 类型将 : Map[String, String] 转换为 Map[String,Object],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46676900/

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