如果mapAsScalaMap
是隐式函数,那么为什么我们必须明确地使用它?为什么不进行递归转换?
import scala.collection.JavaConversions._
val javaObj = yamlObj.asInstanceOf[java.util.LinkedHashMap[String, java.util.LinkedHashMap[String, String]]]
val map: collection.mutable.Map[String, collection.mutable.Map[String, String]] = javaObj << type mismatch
以上是否应该起作用,因为我导入了所有隐式Java转换?
如果我使用mapAsScalaMap(javaObj)
,那么它可以正常工作,但它不会将嵌套的LinkedHashMap
转换为Scala地图。
答案 0 :(得分:0)
隐含的转换不会发生&#34;内部&#34;参数化类型的参数,并且不会递归发生。
您可以使用以下内容转换值:
val map: collection.Map[String, collection.mutable.Map[String, String]] = javaObj.mapValues(x => x: collection.mutable.Map[String, String])
(请注意,map
不提供可变接口 - 它是原始地图上的视图,但无法修改,因为scala不知道如何运行转换相反)。