6
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._ 得到同样的错误。

4

2 回答 2

9

导入 JavaConversions 内容不会使 java 的集合类型成为 scala 集合类型的实例,它在两个不同的集合层次结构之间提供了方便的转换方法。在这种情况下,鉴于您的问题中的导入,您可以从您的 java LinkedHashMap 中获取一个可变的 scala 映射,其中包含以下行:

val s = mapAsScalaMap(m)
于 2013-09-04T01:54:38.697 回答
9

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

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)

阅读最新的文档

于 2013-09-04T01:55:59.370 回答