Eine Java-API gibt java.util.Map<java.lang.String,java.lang.Boolean>
zurück. Ich möchte, dass in einem so Map[String,Boolean]
Konvertieren von von java.util.Map in eine Scala-Map
setzen sich vorstellen, die wir haben:
var scalaMap : Map[String,Boolean] = Map.empty
val javaMap = new JavaClass().map() // Returns java.util.Map<java.lang.String,java.lang.Boolean>
Sie nicht Map.empty ++ javaMap
tun können, weil die ++ Methode nicht weiß, über Java-Karten. Ich habe versucht:
scalaMap = Map.empty ++ new collection.jcl.MapWrapper[String,Boolean] {
override def underlying = javaMap
}
und:
scalaMap = Map.empty ++ new collection.jcl.MapWrapper[java.lang.String,java.lang.Boolean] {
override def underlying = javaMap
}
Diese beiden nicht kompilieren, weil der Generika - java.lang.String
ist nicht das gleiche wie ein scala String.
Gibt es eine gute Möglichkeit, dies zu tun, außer die Karte manuell zu kopieren?
EDIT: Danke, alle guten Antworten, ich habe viel von allen gelernt. Allerdings habe ich einen Fehler gemacht, indem ich hier ein einfacheres Problem gestellt habe als das, was ich tatsächlich habe. Also, wenn Sie mir erlauben, werde ich die Frage verallgemeinern - Was die API tatsächlich zurückgibt, ist
java.util.Map<java.lang.String, java.util.Map<SomeJavaEnum,java.lang.String>>
Und ich muss dazu bewegen Karte [String, Map [SomeJavaEnum, String]]
Es scheint nicht zu kompliziert zu sein, aber es fügt eine zusätzliche Stufe der Typ-Löschung hinzu, und die einzige Möglichkeit, dies auf eine Scala-Map zu verschieben, war das Tiefkopieren (mit einigen der unten vorgeschlagenen Techniken). Irgendwelche Hinweise? Ich habe mein Problem gelöst, indem ich eine implizite Konvertierung für meine genauen Typen definiert habe, so dass zumindest die Hässlichkeit in ihrer eigenen Eigenschaft verborgen ist, aber immer noch ein bisschen plump wirkt und das Ganze kopiert.
ich ganz wie die Conversions antworten ich aus der scala-Benutzergruppe bekam. Ich muss nur nachsehen, ob es funktioniert ... Aber es ist jetzt viel zu spät hier, also werde ich bald zurück schreiben ... – George