Java LinkedHashMap to scala Map转换和递归转换

时间:2015-07-06 21:33:17

标签: java scala

如果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地图。

1 个答案:

答案 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不知道如何运行转换相反)。