为什么IDEA在返回Future of None时会发出警告?

时间:2013-02-16 16:38:20

标签: scala intellij-idea

对于以下代码段,IDEA会发出警告,future {None}将是多余的:

queryString match {
  case Some(query) => ... // Do async call
  case None        => future { None }
}

有更好的可能吗?

3 个答案:

答案 0 :(得分:5)

您可以使用Future.successful[T](result: T)创建已设置的未来而不会产生闭包,因此Future.successful(None)可能是您想要的。

由于期货已经区分了成功和失败,而与其类型参数无关,因此,您也可以通过Future.failed(new Exception("No query string"))发出故障信号,因为您的异步调用也可以省略Some中的包装。 / p>

答案 1 :(得分:1)

我不知道IDEA的警告在这种情况下是否有用。

你可以通过将匹配推向未来来使其沉默:

future {
    queryString match {
        case Some(query) => Some(computeResult(query))
        case None => None
    }
}

(或更简要地说:future { queryString.map(computeResult(_)) }

答案 2 :(得分:1)

我认为我自己解决了这个问题:我不需要在我的Future中封装一个Option,因为Future本身也会失败,因此失败就等于无。

现在我只返回一个未来并且:

queryString match {

  case Some(query) =>
    //async Call which returns a Future without Option
  case None => throw new Exception("Error")
}