代码之家  ›  专栏  ›  技术社区  ›  Frank

如何修复类型不匹配问题?

  •  -1
  • Frank  · 技术社区  · 7 年前

    我有一个火花流工作,有一个关于类型转换的问题。下面是我的代码:

    val component = data.get("viewed_objects").get.asInstanceOf[ListBuffer[Map[String, Any]]]
    

    但例外是

    scala.collection.immutable.$colon$colon不能转换为scala.collection.listbuffer

    是什么导致了这个问题?我该如何解决?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Ramesh Maharjan    7 年前

    在斯卡拉 scala.collection.immutable.$colon$colon 简单地说,数据是 scala.collection.immutable.List 自从 List 生成的 cons ( :: )符号。

    所以这个错误

    scala.collection.immutable.$colon$colon不能转换为scala.collection.listbuffer

    意思是你想改变 列表 ListBuffer 它们是不相容的。

    所以你能做的就是改变 列表缓冲区 列表 作为

    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(),则表示映射为空,则代码将返回exception none.get exception。如何处理得体?

    为你所用 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])}
    
    推荐文章