如何解决几乎每个方法调用上的声纳“可能的空指针取消引用”错误
我正在使用Spring的RestTemplate从远程服务中获取一些数据:
ResponseEntity<....> result = restTemplate.exchange(....);
...然后我将结果用于进一步处理,因此我在上面调用了各种方法,例如:
result.getHeaders().getContentType().getType()
result.getBody()
result.getHeaders().getContentType().getSubtype()
Sonar不喜欢此代码,并且几乎在所有这些方法调用上报告“可能的空指针取消引用”错误。似乎我几乎需要对每个返回值进行null检查。
这使我的代码中有太多的空检查。
可以避免吗?
解决方法
使用Java 8 JavaDocs中的Optional
:
String contentType = Optional.ofNullable(result)
.map(HttpResponse::getHeaders)
.map(Headers::getContentType)
.map(ContentType::getType)
.orElse(null);
HttpResponse
应该是result
的类型,Headers
应该是getHeaders()
的返回类型,依此类推。
您可以使用orElse()
以外的其他终止运算符:
.orElseGet(() -> someOtherProcess());
.orElseThrow(() -> new RuntimeException("Content Type was Null"));
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。