2012-04-06 2 views
6

私はスカラ座2.9.0.1でScalaの地図にのServletRequestからパラメータマップを変換しようとしている:java.util.Collections.unmodifiableMapをどのように変更可能な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 

答えて

8

ちょうど.toMapを呼び出してみませんか? toMapを呼び出すことなく、JavaConversionsだけあなたが暗黙のうちに可変 Scalaのマップに変換することができます

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() 

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

それだけでScalaで表現されなければならないので、JavaのMapは、変更可能であるので、おそらくこれは明示的にimmutable.Mapに変換するまでmutable.Mapとしてください。

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

あなたがrequest.getParameterMap.asInstanceOf[Map[String, Array[String]]]を言うときので、あなたが本当に暗黙的にJavaのを変換するためのScalaを求めている:あなたはちょうどScalaではMapを言うとき、あなたは本当にそのようにMapPredefエイリアスてから約collection.immutable.Mapを話していることを

注意MapをScalaのcollection.immutable.Mapに追加します。これは、JavaのMapが変更可能であるため実行したくありません。

関連する問題