2012-04-06 14 views

Odpowiedz

8

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.

Powiązane problemy