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 Map,因此无法使用MapMap API.我试过了:
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 String不同.
有没有一个很好的方式做这个,手动复制地图
编辑:谢谢,所有好的答案,我从所有的学到了很多.但是,我发现一个比我实际拥有的更简单的问题,我犯了一个错误.所以,如果你允许我,我将泛化这个问题 – API实际返回的是什么
java.util.Map>
我需要把它移动到Map [String,Map [SomeJavaEnum,String]]
它可能似乎并不太复杂,但它增加了一个额外的类型擦除,我发现将其移动到Scala地图的唯一方法是深入复制(使用您以下建议的一些技术) .有任何提示吗?我通过为我的确切类型定义隐式转换来解决我的问题,所以至少丑陋隐藏在自己的特质中,但仍然觉得有点笨拙的深层复制.