Scala Java深度映射转换(ConcurrentHashMap)

Scala Java深度映射转换(ConcurrentHashMap),scala,scala-2.8,scala-collections,Scala,Scala 2.8,Scala Collections,我有一个ConcurrentHashMap对象,定义如下: import scala.collection.JavaConversions._ val storage: ConcurrentMap[String,ConcurrentMap[Int,ConcurrentMap[String,Double]]] = new ConcurrentHashMap[String,ConcurrentHashMap[Int,ConcurrentHashMap[String,Double]]] Scala(

我有一个ConcurrentHashMap对象,定义如下:

import scala.collection.JavaConversions._
val storage: ConcurrentMap[String,ConcurrentMap[Int,ConcurrentMap[String,Double]]] =
new ConcurrentHashMap[String,ConcurrentHashMap[Int,ConcurrentHashMap[String,Double]]]
Scala(2.8.1)在编译时抱怨出现以下错误:

found   : java.util.concurrent.ConcurrentHashMap[String,java.util.concurrent.ConcurrentHashMap[String,String]]
required: scala.collection.mutable.ConcurrentMap[String,scala.collection.mutable.ConcurrentMap[String,String]]
但当我尝试以下代码时,它是有效的:

val storage: ConcurrentMap[String,Double] = new ConcurrentHashMap[String,Double]

非常感谢您对如何修复此错误的评论。

隐式转换(如JavaConversions提供的转换)在实例级别而不是类型级别工作。因此,虽然可以转换最外面的贴图,但不会转换内部贴图

没有直接隐式转换嵌套大小写的方法。不幸的是,在以下示例中,似乎没有正确选择最具体的隐式表达式:

scala> val storage = new ConcurrentHashMap[String,ConcurrentHashMap[Int,ConcurrentHashMap[String,Double]]]
storage: java.util.concurrent.ConcurrentHashMap[String,java.util.concurrent.ConcurrentHashMap[Int,java.util.concurrent.ConcurrentHashMap[String,Double]]] = {}

scala> import scala.collection.JavaConverters._

scala> for ((i, m) <- storage.asScala; (j, m2) <- m.asScala; (k, l) <- m2.asScala) yield ((i, j) -> (k, l))
res0: scala.collection.mutable.Map[(String, Int),(String, Double)] = Map()

scala> import scala.collection.JavaConversions._

scala> for ((i, m) <- storage; (j, m2) <- m; (k, l) <- m2) yield ((i, j) -> (k, l))                        
res3: scala.collection.mutable.Map[(String, Int),(String, Double)] = Map()
scala>val storage=new ConcurrentHashMap[String,ConcurrentHashMap[Int,ConcurrentHashMap[String,Double]]
存储:java.util.concurrent.ConcurrentHashMap[String,java.util.concurrent.ConcurrentHashMap[Int,java.util.concurrent.ConcurrentHashMap[String,Double]]]]={}
scala>导入scala.collection.JavaConverters_
scala>for((i,m)for((i,m)