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.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage