как исправить проблему несоответствия типов? - PullRequest
0 голосов
/ 01 июля 2018

У меня есть работа с потоковым воспроизведением, и у меня возник вопрос о преобразовании типов. ниже мой код:

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

но исключение составляет

scala.collection.immutable. $ Colon $ colon нельзя преобразовать в scala.collection.ListBuffer

что вызвало проблему и как ее исправить?

1 Ответ

0 голосов
/ 01 июля 2018

В 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]] = ...

будет достаточно

Надеюсь, ответ полезен

Обновление

Вы прокомментировали как

Кстати, если значением данных является 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])}
...