Scala Java深度图转换(ConcurrentHashMap)

| 我有一个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()
因此,在最终分析中,我预计将来会出现很多类型注释(上面的理解可能适用于显式类型注释,但是我很想把它全部打出来。)

要回复问题请先登录注册