Co powiesz na to, dzwoniąc pod numer .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()
Bez nazywając toMap
, JavaConversions
tylko pozwala niejawnie przekonwertować do zmienny Scala mapie:
scala> val z: collection.mutable.Map[Int,Int] = x
z: scala.collection.mutable.Map[Int,Int] = Map()
Przypuszczalnie To dlatego, że Java Map
jest zmienny, więc powinien być reprezentowany tylko w Scala jako mutable.Map
, dopóki nie zostanie jawnie przekonwertowana na wersję immutable.Map
.
pamiętać, że po prostu powiedzieć Map
w Scala, jesteś naprawdę mówimy o collection.immutable.Map
od czasu Predef
aliasy Map
ten sposób:
scala> Map()
res0: scala.collection.immutable.Map[Nothing,Nothing] = Map()
Więc kiedy mówisz request.getParameterMap.asInstanceOf[Map[String, Array[String]]]
, jesteś naprawdę pytając Scala niejawnie przekonwertować Java Map
w Scala's collection.immutable.Map
, której nie chce robić, ponieważ Java Map
jest zmienna.