我想还有另一种更优雅的方式来编写此代码:
private boolean validateGicarHeaders(HttpServletRequest request) {
return null != Optional.ofNullable(
request.getHeader(EspaiDocConstants.Headers.GICAR_HEADER))
.orElse(request.getHeader(EspaiDocConstants.Headers.HTTP_GICAR_HEADER));
}
有什么想法吗?
答案 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();