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