scala - 如何解决类型不匹配问题?
问题描述
我有一个火花流工作,并且有一个关于类型转换的问题。以下是我的代码:
val component = data.get("viewed_objects").get.asInstanceOf[ListBuffer[Map[String, Any]]]
但例外是
scala.collection.immutable.$colon$colon 不能转换为 scala.collection.ListBuffer
是什么导致了这个问题,我该如何解决?
解决方案
在 scalascala.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]] = ...
就足够了
我希望答案有帮助
更新
你评论为
顺便说一句,如果数据值为 data:Map(),这意味着一个空 Map,您的代码将返回异常 None.get 异常。如何优雅地处理它?
因为你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])}
推荐阅读
- swift - 在 WatchOS 中使用列表时滚动行为不正确
- json - 如何通过firebase托管将我的主页重定向到随机网址?
- c# - 单击文本框后出现键盘,然后移动视图滚动错误
- react-native - 从 react navigationOptions 调用 redux state props
- python-3.x - 在 python 中从 __future__ 导入 pow 函数
- sql - SQL全文和反对
- python - 提取与熊猫中的模式匹配的csv行
- javascript - 在模态图像下方添加一个 DIV 框以进行描述
- data-distribution-service - DDS Fast-RTPS 支持跨网络通信吗?
- xmpp - 是否有使用 webhooks 发送节的 ejabberd 模块?