Java可选:检查几种选择(代码更优雅)

时间:2019-01-11 08:14:09

标签: java optional

我想还有另一种更优雅的方式来编写此代码:

private boolean validateGicarHeaders(HttpServletRequest request) {
    return null != Optional.ofNullable(
           request.getHeader(EspaiDocConstants.Headers.GICAR_HEADER))
  .orElse(request.getHeader(EspaiDocConstants.Headers.HTTP_GICAR_HEADER));
}

有什么想法吗?

4 个答案:

答案 0 :(得分:4)

这是对Optional的错误使用,只需使用常规比较和||(OR)运算符即可:

return 
    request.getHeader(EspaiDocConstants.Headers.GICAR_HEADER) != null || 
    request.getHeader(EspaiDocConstants.Headers.HTTP_GICAR_HEADER) != null;

请记住,引入Optional是为了指示缺少返回值,并且不会像if那样在分支逻辑中使用。 (很遗憾,我找不到能证实这一点的消息来源)

答案 1 :(得分:2)

根本不需要Optional:只需使用普通的旧null检查即可。

return request.getHeader(EspaiDocConstants.Headers.GICAR_HEADER) != null
    || request.getHeader(EspaiDocConstants.Headers.HTTP_GICAR_HEADER) != null;

答案 2 :(得分:2)

只需保留旧方法:

return 
    request.getHeader(EspaiDocConstants.Headers.GICAR_HEADER) != null ||
    request.getHeader(EspaiDocConstants.Headers.HTTP_GICAR_HEADER) != null;

如果您绝对想使用某些精美的Java8功能,则可以使用Streams

return Stream.of(
    request.getHeader(EspaiDocConstants.Headers.GICAR_HEADER),
    request.getHeader(EspaiDocConstants.Headers.HTTP_GICAR_HEADER)
).anyMatch(Objects::nonNull);

答案 3 :(得分:-1)

正如人们已经说过的那样,这是不必要的-并不是很好的方法。但是,如果您真的很想对Optionals进行此检查,则可以这样做。

Optional.ofNullable( 
    Optional.ofNullable( request.getHeader(EspaiDocConstants.Headers.GICAR_HEADER) )
    .orElse( request.getHeader(EspaiDocConstants.Headers.HTTP_GICAR_HEADER) ) ).isPresent();