[英]Sonarqube shows NullPointerException bug even after null check is present in Java
Sonarqube 说这段代码中有两个主要错误,在 if 条件的第二条语句中。
第一的:
可能会抛出“NullPointerException”; “getResponseHeaders()”可以返回 null。
第二:
“getResponseHeaders()”的结果被取消引用
private ResponseEntity<ErrorResponse> handleHttpStatusCodeException(HttpStatusCodeException exception) {
ResponseEntity.BodyBuilder response = ResponseEntity.status(exception.getStatusCode());
if (exception.getResponseHeaders() != null && exception.getResponseHeaders().getContentType() != null) {
response.contentType(exception.getResponseHeaders().getContentType());
}
return response.body(createErrorResponse(exception.getResponseBodyAsString()));
}
有没有办法,我可以更改代码以避免错误?
从理论上讲,另一个线程可能会在您检查exception.getResponseHeaders()
的结果之后更改它的非空值,但在您第二次调用它之前。 这种检查然后行动并不总是安全的。
处理此问题的更安全方法是分配给本地
var headers = exception.getResponseHeaders();
if (headers != null) {
var contentType = headers.getContentType();
if (contentType != null) {
response.contentType(contentType);
}
}
无论如何,我认为这比您的解决方案更具可读性。
当然,如果您的对象没有被多个线程改变或者是不可变的,那么这个警告是一个可以忽略的误报。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.