0

在我的加特林场景中,我需要检查会话中是否有一些将是数字向量的条目。如果存在向量,我可以获得向量,但是当我尝试使用 .sum 添加它们时,我得到一个 ClassCastException 说明 java.lang.String 不能转换为 java.lang.Integer

我已经通过打印从会话中检索到的值 (Vector(100,200,300)) 进行了调试,甚至确认了各个元素是 Ints。但是,当我尝试添加它们中的任何一个时,无论是使用 values.sum 还是 values(0)+values(1) 我都会得到类转换异常

我在会话中设置值,检查如下

.check(jsonPath("$..payments..paymentAmount").findAll.optional.saveAs("payments"))
.check(jsonPath("$..receipts..receiptAmount").findAll.optional.saveAs("receipts"))

在我的应用程序中,如果路径存在,这些将始终导致 Vector(100, 200, 300) 之类的东西

然后稍后我想总结这些列表中的所有值,所以我有行动

.exec(session => {
   def addAmounts(listNames: Array[String]): Int = {
          listNames.foldLeft(0)((acc, listName) => {
            session(listName).validate[Seq[Int]] match {
              case Success(ints) =>  ints.sum + acc
              case Failure(error) => acc
          }})
   }

   val transactionsTotal = addAmounts(Array("payments", "receipts"))
   session.set("total",transactionsTotal) 
}

如前所述,这在 listName.sum + acc 语句中失败 - 因为它们都是 Ints 我希望没有必要从字符串中强制转换检查中没有存储任何内容的失败案例工作正常

4

1 回答 1

0

我认为这是一个 scala 类型推断问题 - 我在进行加法之前通过手动转换为 Int 使其工作

于 2019-05-16T11:34:39.370 回答