Scala中JavaConverters无法转换静态方法返回集合的问题
解决Scala 2.11调用Java库Map转换的编译错误
嗨,你这里犯了个小方向错误!
asJava方法是用来把Scala集合转换成Java集合的,但你现在拿到的是Java库返回的java.util.Map<String, String>,要转成Scala的Map,得用对应的反向转换方法asScala才行。
正确的代码实现
首先确保你已经导入了正确的转换工具包:
import scala.collection.JavaConverters._
然后修改你的代码:
// 先得到Scala可变Map val mutableScalaMap: scala.collection.mutable.Map[String, String] = Environment.load("dev").asScala // 如果需要Scala默认的不可变Map,再调用toMap转换 val immutableScalaMap: Map[String, String] = Environment.load("dev").asScala.toMap
为什么之前会报错?
在Scala 2.11的JavaConverters里,转换方法是严格对应方向的:
asJava:Scala集合 → Java集合asScala:Java集合 → Scala集合
另外要注意,Java的Map对应的是Scala的可变Map,所以asScala返回的是scala.collection.mutable.Map。如果你的业务逻辑需要不可变的Map(也就是Scala默认导入的scala.collection.immutable.Map),就需要额外调用toMap方法来完成转换。
内容的提问来源于stack exchange,提问作者hotmeatballsoup
相关产品推荐
相关产品推荐

