簡體   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