直接打电话怎么样.toMap
?
import collection.JavaConversions._
val x = java.util.Collections.unmodifiableMap[Int,Int](new java.util.HashMap[Int,Int]())
val y: Map[Int,Int] = x.toMap //y: Map[Int,Int] = Map()
不调用toMap
,JavaConversions
仅允许您隐式转换为可变Scala 映射:
scala> val z: collection.mutable.Map[Int,Int] = x
z: scala.collection.mutable.Map[Int,Int] = Map()
这大概是因为 JavaMap
是可变的,所以它应该只在 Scala 中表示为 a mutable.Map
,直到您将它显式转换为immutable.Map
.
请注意,当您只是Map
在 Scala 中说时,您实际上是在谈论collection.immutable.Map
因为Predef
别名Map
是这样的:
scala> Map()
res0: scala.collection.immutable.Map[Nothing,Nothing] = Map()
因此,当您说 时request.getParameterMap.asInstanceOf[Map[String, Array[String]]]
,您实际上是在要求 Scala 将 Java 隐式转换Map
为 Scala ,因为 Java是可变的collection.immutable.Map
,所以它不想这样做。Map