7

パラメータ マップを ServletRequest から Scala 2.9.0.1 の Scala Map に変換しようとしています。

val params = request.getParameterMap.asInstanceOf[Map[String, Array[String]]]

collection.JavaConversions._ をインポートしましたが、実行時にこれがスローされます。

java.lang.ClassCastException: java.util.Collections$UnmodifiableMap cannot be cast to scala.collection.immutable.Map
4

1 に答える 1

8

電話.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変更可能なScala マップJavaConversionsに暗黙的に変換されるだけです。

scala> val z: collection.mutable.Map[Int,Int] = x
z: scala.collection.mutable.Map[Int,Int] = Map()

おそらくこれは、JavaMapがミュータブルであるためです。mutable.Mapそのため、明示的に に変換するまでは、Scala では としてのみ表現する必要がありimmutable.Mapます。

MapScala で言うときは、エイリアスcollection.immutable.Map以降について話していることに注意してください。PredefMap

scala> Map()
res0: scala.collection.immutable.Map[Nothing,Nothing] = Map()

したがって、あなたが言うとき、あなたは実際に Javaを Scala のrequest.getParameterMap.asInstanceOf[Map[String, Array[String]]]に暗黙的に変換するように Scala に要求しています。Mapcollection.immutable.MapMap

于 2012-04-06T17:31:54.423 に答える