在Scala中动态处理任何数据类型

时间:2017-05-17 13:13:55

标签: scala scalatra

我在Scala中有一个由Map[String, Any]

类型的函数返回的映射

例如:

val map: Map[String, Any] = Map("key1" -> "strVal", "key2" -> List[Map[String, Any]](), "key3" -> Map("k1" -> "v1"))

现在的问题是,为了处理与键相对应的值,我每次都要使用asInstanceOf[]。例如,

val key2Hash = map.getOrElse("key3", Map()).getOrElse("k1", "")

引发错误,因为检索到的地图的格式为Any,我必须对以下所有情况使用asInstanceOf[]

val key2Hash = map.getOrElse("key3", Map()).asInstanceOf[Map[String, String]].getOrElse("k1", "")

有更好的方法吗?或者我不应该首先使用Map[String, Any]开始?

1 个答案:

答案 0 :(得分:3)

Map[String, Any]?你不妨直接使用python!

开玩笑,你可以得到更好的"使用模式匹配强制转换语法:

map.get("key3") match {
  case Some(anotherMap: Map[String, String]) => ...
  case _ => ...
}