2012-04-06 8 views
6

मैं स्काला में एक स्काला नक्शा करने के लिए एक ServletRequest से पैरामीटर नक्शा कन्वर्ट करने के लिए कोशिश कर रहा हूँ 2.9.0.1:आप एक java.util.Collections.unmodifiableMap को एक अपरिवर्तनीय स्कैला मानचित्र में कैसे परिवर्तित करते हैं?

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 पर कॉल करने के बारे में कैसे?

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> val z: collection.mutable.Map[Int,Int] = x 
z: scala.collection.mutable.Map[Int,Int] = Map() 

मुमकिन है इस वजह से एक जावा Map परिवर्तनशील है, तो यह केवल स्काला में प्रतिनिधित्व होना चाहिए mutable.Map के रूप में जब तक आप इसे स्पष्ट रूप से immutable.Map में परिवर्तित नहीं करते हैं।

ध्यान दें कि जब तुम सिर्फ स्काला में Map कहते हैं, क्या तुम सच में के बारे में collection.immutable.MapPredef के बाद उपनाम बात कर रहे हैं Map कि जिस तरह से:

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

तो जब आप कहते हैं कि request.getParameterMap.asInstanceOf[Map[String, Array[String]]], तुम सच में स्काला पूछ रहे हैं परोक्ष एक जावा कन्वर्ट करने के लिए Map स्कैला के collection.immutable.Map में, जो जावा के Map के बाद से ऐसा नहीं करना चाहता है।

संबंधित मुद्दे

 संबंधित मुद्दे