एक जावा एपीआई java.util.Map<java.lang.String,java.lang.Boolean>
देता है; मैं डाल करने के लिए है कि एक Map[String,Boolean]
java.util.Map से एक स्कैला मानचित्र में कनवर्ट करने के लिए कैसे करें
में तो सोच भी हमारे पास करना चाहते हैं:
var scalaMap : Map[String,Boolean] = Map.empty
val javaMap = new JavaClass().map() // Returns java.util.Map<java.lang.String,java.lang.Boolean>
आप Map.empty ++ javaMap
ऐसा नहीं कर सकते, क्योंकि ++ विधि जावा नक्शे के बारे में पता नहीं है। मैंने कोशिश की:
scalaMap = Map.empty ++ new collection.jcl.MapWrapper[String,Boolean] {
override def underlying = javaMap
}
और:
scalaMap = Map.empty ++ new collection.jcl.MapWrapper[java.lang.String,java.lang.Boolean] {
override def underlying = javaMap
}
इन दोनों क्योंकि जेनरिक का संकलन करने, असफल - java.lang.String
एक स्केला स्ट्रिंग के रूप में ही नहीं है।
क्या ऐसा करने का कोई अच्छा तरीका है, मानचित्र को मैन्युअल रूप से कॉपी करने से कम?
संपादित करें: धन्यवाद, सभी अच्छे उत्तरों, मैंने उन सभी से बहुत कुछ सीखा। हालांकि, मैंने वास्तव में मेरे पास एक साधारण समस्या पोस्ट करके गलती की है। तो, अगर तुम मुझे अनुमति देते हैं, मैं प्रश्न सामान्यीकरण होगा - क्या एपीआई वास्तव में रिटर्न
java.util.Map<java.lang.String, java.util.Map<SomeJavaEnum,java.lang.String>>
है और मैं इस स्थानांतरित करने के लिए मैप करने की आवश्यकता [स्ट्रिंग, मानचित्र [SomeJavaEnum, स्ट्रिंग]]
यह शायद एक जटिलता की तरह प्रतीत नहीं होता है, लेकिन यह एक अतिरिक्त स्तर के प्रकार को मिटा देता है, और स्केल मैप में इसे स्थानांतरित करने का एकमात्र तरीका यह गहराई से कॉपी कर रहा था (नीचे दी गई कुछ तकनीकों का उपयोग करके)। कोई भी संकेत देता है? मैंने अपने सटीक प्रकारों के लिए एक अंतर्निहित रूपांतरण को परिभाषित करके अपनी समस्या का समाधान किया, इसलिए कम से कम कुरूपता अपने ही गुण में छिपी हुई है, लेकिन फिर भी बहुत कुछ गड़बड़ कर रही है।
मुझे स्केल-उपयोगकर्ता समूह से मिलने वाले रूपांतरणों के जवाब पसंद हैं। बस यह जांचने की ज़रूरत है कि यह काम करता है ... लेकिन यह अभी बहुत देर हो चुकी है, इसलिए जल्द ही पोस्ट कर देगा ... – George