Wie konvertiert man von java.util.Map zu einer Scala Map
Eine Java-API gibt a zurückjava.util.Map<java.lang.String,java.lang.Boolean>
; Ich würde das gerne in eineMap[String,Boolean]
Stellen Sie sich vor, wir haben:
<code>var scalaMap : Map[String,Boolean] = Map.empty val javaMap = new JavaClass().map() // Returns java.util.Map<java.lang.String,java.lang.Boolean> </code>
Das kannst du nichtMap.empty ++ javaMap
, weil die ++ Methode keine Java Maps kennt. Ich habe es versucht:
<code>scalaMap = Map.empty ++ new collection.jcl.MapWrapper[String,Boolean] { override def underlying = javaMap } </code>
und:
<code>scalaMap = Map.empty ++ new collection.jcl.MapWrapper[java.lang.String,java.lang.Boolean] { override def underlying = javaMap } </code>
Diese beiden können aufgrund der Generika nicht kompiliert werden -java.lang.String
ist nicht dasselbe wie eine Scala-Saite.
Gibt es eine gute Möglichkeit, die Karte manuell zu kopieren?
EDIT: Danke, alle guten Antworten, ich habe viel von ihnen allen gelernt. Ich habe jedoch einen Fehler gemacht, indem ich hier ein einfacheres Problem als das, das ich tatsächlich habe, gepostet habe. Wenn Sie mir erlauben, verallgemeinere ich die Frage: Was gibt die API tatsächlich zurück?
<code>java.util.Map<java.lang.String, java.util.Map<SomeJavaEnum,java.lang.String>> </code>
Und ich muss dies auf Map [String, Map [SomeJavaEnum, String]] verschieben
Es scheint wahrscheinlich keine allzu große Komplikation zu sein, aber es fügt eine zusätzliche Ebene der Typ-Löschung hinzu, und die einzige Möglichkeit, dies auf eine Scala-Karte zu verschieben, bestand darin, sie tief zu kopieren (unter Verwendung einiger der unten vorgeschlagenen Techniken). . Jemand irgendwelche Hinweise? Ich habe mein Problem irgendwie gelöst, indem ich eine implizite Konvertierung für meine exakten Typen definiert habe, so dass zumindest die Hässlichkeit in ihrem eigenen Merkmal verborgen ist, aber ich fühle mich immer noch etwas ungeschickt, wenn ich das Los kopiere.