在 Scala 中动态处理任何数据类型
Handle Any data type dynamically in Scala
我在 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]
开始吗?
Map[String, Any]
?你还不如直接用python!
开个玩笑,您可以使用模式匹配获得 "nicer" 强制转换语法:
map.get("key3") match {
case Some(anotherMap: Map[String, String]) => ...
case _ => ...
}
我在 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]
开始吗?
Map[String, Any]
?你还不如直接用python!
开个玩笑,您可以使用模式匹配获得 "nicer" 强制转换语法:
map.get("key3") match {
case Some(anotherMap: Map[String, String]) => ...
case _ => ...
}