我有一个流媒体工作,并且对类型转换有疑问。以下是我的代码:
val component = data.get("viewed_objects").get.asInstanceOf[ListBuffer[Map[String, Any]]]
但例外是
scala.collection.immutable。$ colon $ colon无法转换为scala.collection.ListBuffer
什么原因导致了该问题以及如何解决?
答案 0 :(得分:1)
在scala中,scala.collection.immutable.$colon$colon
仅表示数据为scala.collection.immutable.List
,因为List
是使用cons
(::
)表示法生成的。
所以错误
scala.collection.immutable。$ colon $ colon无法转换为scala.collection.ListBuffer
意味着您正尝试将List
转换为ListBuffer
,并且它们不兼容。
所以您可以做的是将ListBuffer
更改为List
val component = data.get("viewed_objects").get.asInstanceOf[List[Map[String, Any]]]
但这将是无用的类型转换,因为data.get("viewed_objects").get
已经是List[Map[String, Any]]
类型
就这样
val component = data.get("viewed_objects").get
//component: List[scala.collection.immutable.Map[String,Any]] = ...
足够了
我希望答案会有所帮助
更新
您评论为
btw,如果数据值为data:Map(),则意味着一个空的Map,您的代码将返回异常None.get异常。如何优雅地处理它?</ p>
为此,您将Try
getOrElse
用作
val component = Try(data.get("viewed_objects").get).getOrElse(List(Map.empty[String, Any]))
或者您可以将模式匹配用作
val component = data.get("viewed_objects") match {case Some(data) => data; case None => List(Map.empty[String, Any])}