我有以下测试方法
def test() = {
val aa = Future{10} map {
case x if x%2 == 0 => (x,x)
case _ => val kk = Future.failed(BadRequestException("dd")); kk
}
aa
}
如果删除case _
,则返回类型的方法为Future[(Int, Int)]
,这正是我想要的。但是,当我添加case _
方案时,返回类型变为Future[Object]
。我无法理解我应该更改什么,因为我们的代码库中的其他类似方法做类似的事情(我确信我遗漏了一些微妙的东西)并且返回类型仍然是自然Future[(Int, Int)]
。毕竟,当我为场景抛出异常时,我不希望改变方法的返回类型。我错过了什么或做错了什么?
答案 0 :(得分:3)
您应该使用flatMap
代替map
,如下所示。使用map
方法,case _
的返回类型为Future[BadRequestException]
,而case x if x%2 == 0
的返回类型为(Int, Int)
。这导致您的净回报类型为Future[Object]
。这可以通过使用flatMap而不是map来更正,如下所示。
def test() = Future{10} flatMap {
case x if x%2 == 0 => Future.successful((x,x))
case _ => Future.failed(BadRequestException("dd"))
}