【问题标题】:Not a member of Product with Serializable不是可序列化产品的成员
【发布时间】:2016-05-27 07:44:52
【问题描述】:

我正在等待多个未来的响应:

val futureResult =
      for{
      futureEmployee    <- this.getEmployeeById(effortConsulting.sObject.createdById)
      futureForCompany  <- this.getCompanyById(effortConsulting.sObject.forCompany)
      futureFromCompany <- this.getCompanyById(effortConsulting.sObject.fromCompany)
    } yield List(futureEmployee, futureForCompany, futureFromCompany)

futureResult onComplete {
      case Success(futureResponse) => {
    println(futureResponse)

      } [...]

println 输出如下:

List(Employee([...]), Company([...]), Company([...]))

好的,这很好。但现在我想像这样使用这些对象:

    val employee      = futureResponse(0)
    val fromCompany   = futureResponse(2)
    val forCompany    = futureResponse(1)

    println(forCompany.name)

这行不通。我收到以下编译错误:

值名称不是可序列化产品的成员

我该如何解决这个问题以及为什么会发生?

【问题讨论】:

    标签: scala serialization


    【解决方案1】:

    List[A] 的所有成员必须具有相同类型的A。因此,如果您尝试构造一个包含不同类型成员的List,您实际上会得到它们共同超类型的List

    因为所有案例类都扩展了ProductSerializable 特征,如果您尝试创建一个包含不相关案例类的列表,您会得到一个List[Product with Serializable]。当然,如果您尝试从该列表中获取一个元素,您会得到一个Product with Serializable

    【讨论】:

      【解决方案2】:

      好的,我知道了。我必须创建一个元组而不是一个列表。像这样:

      val futureResult =
        for{
        futureEmployee    <- this.getEmployeeById(effortConsulting.sObject.createdById)
        futureForCompany  <- this.getCompanyById(effortConsulting.sObject.forCompany)
        futureFromCompany <- this.getCompanyById(effortConsulting.sObject.fromCompany)
      } yield (futureEmployee, futureForCompany, futureFromCompany)
      

      然后,我可以使用 ._ 访问元组

          val employee      = futureResponse._1
          val fromCompany   = futureResponse._2
          val forCompany    = futureResponse._3
      
          println(employee)
      

      谁能告诉我这是什么原因?

      【讨论】:

        猜你喜欢
        • 2018-10-17
        • 2016-05-22
        • 2021-10-27
        • 2015-07-20
        • 1970-01-01
        • 2018-11-22
        • 1970-01-01
        • 2016-05-07
        相关资源
        最近更新 更多