繁体   English   中英

即使在 Java 中存在空检查后,Sonarqube 仍显示 NullPointerException 错误

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM