如何正确使用Java 8 Optional可以有条件地返回值或抛出异常?

sha*_*ulk 5 java optional java-8

我想实现类似下面的代码来验证我的输入,@RestController以便我可以避免显式空检查,但是我被卡住了.

public @ResponseBody Response getCityDetails(@RequestParam("city") final String city) {
    Optional.of(city).ifPresent(name -> {
        // return value
        return service.getDetails(name);
    }).orElseThrow(//some Exception);
}
Run Code Online (Sandbox Code Playgroud)

Had*_*i J 11

试试这个

Optional.ofNullable(city)
        .map(name ->service.getDetails(name))
        .orElseThrow(//some Exception);
Run Code Online (Sandbox Code Playgroud)

  • 您可以使用方法引用:`service :: getDetails` (7认同)
  • @talex这个`Optional.map`里面的函数参数永远不会是'null`.当你使用带有`null`参数的`Optional.of`时,你会在这一点上得到一个异常,甚至没有到达`map`步骤. (3认同)
  • 它应该是`ofNullable`,否则`name`将在`map`中为`null`. (2认同)