Java API返回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
,因爲++方法不知道有關Java的地圖。我想:
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
是不一樣的Scala的字符串。
有沒有這樣做的好方法,手動複製地圖短?
編輯:謝謝,所有好的答案,我從他們中學到了很多。然而,我在這裏發佈了一個比我實際擁有的更簡單的問題而犯了一個錯誤。所以,如果你讓我,我會概括問題 - 什麼是API實際上返回是
java.util.Map<java.lang.String, java.util.Map<SomeJavaEnum,java.lang.String>>
我需要移動這地圖[字符串,地圖[SomeJavaEnum,字符串]]
它可能看起來不太複雜,但它增加了一個額外的類型擦除級別,我發現將它移到Scala地圖的唯一方式是深度複製它(使用您在下面建議的一些技巧)。任何提示?我通過爲我的確切類型定義一個隱式轉換來解決我的問題,所以至少這個醜陋隱藏在它自己的特質中,但仍然感覺有點笨拙。
我很喜歡我從scala用戶組獲得的轉換答案。只需要檢查它是否可行...但現在這裏太晚了,所以很快會回來... – George 2009-06-22 22:30:57