【问题标题】:Scala List with mixed type mismatch errors具有混合类型不匹配错误的 Scala 列表
【发布时间】:2018-01-10 05:45:29
【问题描述】:

我可以使用具有不同数据类型的 scala 列表吗?我试图创建一个对不同值进行硬编码的 projList,但出现了不匹配错误。我不知道如何在下面将 Any 转换为 Long、Timestamp 和 Boolean。有任何想法吗?请指教。谢谢!!

val cTime: Timestamp = new Timestamp(System.currentTimeMillis())
val projList = List("test", 102, cTime, true)
Project(projList(0), projList(1), projList(2), projList(3))

type mismatch;
[error]  found   : Any
[error]  required: Long
[error]  Project(1, projList(0).toString, projList(1), projList(2), projList(3))

【问题讨论】:

  • Type Any 是编译器的说法,“我不知道原始数据类型是什么了。从这里开始,你就靠你自己了。”尽可能避免输入Any(它几乎总是可能的)。
  • 查看this question 和答案,了解更多详情。

标签: scala


【解决方案1】:

您创建的列表是List[Any]。您可以使用包含 4 种类型的 Tuple4

val projParams = ("test", 102, cTime, true)
Project(projParams._1, projParams._2, projParams._3, projParams._4)

何必呢?

Project("test", 102, cTime, true)

【讨论】:

    【解决方案2】:

    我不知道你为什么使用 List[Any],看起来像一个完整的反模式,但如果你真的需要,那么你可以像这样转换变量:

    Project(projList(0).asInstanceOf[String], 
      projList(1).asInstanceOf[Long], 
      projList(2).asInstanceOf[Timestamp], 
      projList(3).asInstanceOf[Boolean])
    

    注意 120 是一个 Integer 并且将无法解析为 Long,你应该使用 120L

    【讨论】:

      猜你喜欢
      • 2023-03-06
      • 2012-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多