Java API は ; を返しjava.util.Map<java.lang.String,java.lang.Boolean>
ます。私はそれを入れたいと思いますMap[String,Boolean]
想像してみてください:
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
スカラ文字列と同じではありません。
マップを手動でコピーする以外に、これを行う良い方法はありますか?
編集:ありがとう、すべての良い答え、私はそれらすべてから多くを学びました. しかし、私が実際に抱えている問題よりも簡単な問題をここに投稿して、間違いを犯しました。許可があれば、質問を一般化します - API が実際に返すのは
java.util.Map<java.lang.String, java.util.Map<SomeJavaEnum,java.lang.String>>
そして、これを Map[String, Map[SomeJavaEnum,String]] に移動する必要があります
それほど複雑ではないように思えるかもしれませんが、型消去のレベルが追加されます。これを Scala マップに移動するために私が見つけた唯一の方法は、それをディープ コピーすることでした (以下で提案した手法のいくつかを使用)。 . 誰でもヒントはありますか?正確な型の暗黙的な変換を定義することで問題を解決したので、少なくとも醜さはそれ自体の特性に隠されていますが、それでも多くを深くコピーするのは少し不器用です。