【发布时间】:2019-08-20 10:15:06
【问题描述】:
在我的加特林场景中,我需要检查会话中是否有一些将是数字向量的条目。如果存在向量,我可以获取向量,但是当我尝试使用 .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 我希望不需要从字符串转换 从检查中没有存储任何内容的失败案例工作正常
【问题讨论】:
-
我发现如果我将会话变量作为 Vector[String] 然后根据需要手动转换为 Int ,我可以让它工作。但我仍然认为原始版本应该可以工作 - 会话属性是 String -> Any 的映射。当我检索为 Vector[Int] 并使用 getClass 之类的调用进行调试时,所有内容都被列为 Int,但尝试添加会导致 classCastException
-
我认为该类型在模式匹配时会丢失,所以如果您将大小写更改为:
case Success(ints: Seq[Int]) => ints.sum + acc它也应该可以工作