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

时间:2013-09-04 01:47:45

标签: 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]]

返回以下错误

  

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

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

2 个答案:

答案 0 :(得分:8)

导入JavaConversions的东西不会使scala集合类型的java集合类型成为实例,它在两个不同的集合层次结构之间提供了方便的转换方法。在这种情况下,考虑到你的问题中的导入,你可以从你的java LinkedHashMap获得一个可变的scala Map,其中包含以下行:

val s = mapAsScalaMap(m)

答案 1 :(得分:8)

不要施放,只使用隐式转换:

val s: scala.collection.mutable.Map[String,Int] = m

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

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)

阅读latest documentation