将java.util.LinkedHashMap转换为scala.collection.mutable.Map

dee*_*imo 5 scala scala-collections

import scala.collection.JavaConversions._
val m = new java.util.LinkedHashMap[String,Int]
val s: scala.collection.mutable.Map[String,Int] = m.asInstanceOf[scala.collection.mutable.Map[String,Int]]
Run Code Online (Sandbox Code Playgroud)

返回以下错误

java.lang.ClassCastException:java.util.LinkedHashMap无法强制转换为scala.collection.mutable.Map

这里有什么问题以及如何进行这种投射?我也试过scala.collection.JavaConverters._得到同样的错误.

Sha*_*nds 8

导入JavaConversions的东西并不会使java的集合类型成为scala集合类型的实例,它在两个不同的集合层次结构之间提供了方便的转换方法.在这种情况下,根据您的问题中的导入,您可以使用以下行从Java LinkedHashMap获取可变的scala Map:

val s = mapAsScalaMap(m)
Run Code Online (Sandbox Code Playgroud)


som*_*ytt 8

不要强制转换,只需使用隐式转换:

val s: scala.collection.mutable.Map[String,Int] = m
Run Code Online (Sandbox Code Playgroud)

编辑:一些(或大多数)偏好转换器,因为它们是显式的:

scala> val m = new java.util.LinkedHashMap[String,Int]
m: java.util.LinkedHashMap[String,Int] = {}

scala> m.put("one",1)
res0: Int = 0

scala> import scala.collection.JavaConverters._
import scala.collection.JavaConverters._

scala> val s = m.asScala
s: scala.collection.mutable.Map[String,Int] = Map(one -> 1)
Run Code Online (Sandbox Code Playgroud)

阅读最新文档.