![](/img/trans.png)
[英]sonarLint complains “Null pointers should not be dereferenced (squid:S2259)” despite that possibility being handled
[英]How do I fix squid:S2259 `NullPointerException might be thrown as 'getString' is nullable here`?
我有以下代碼塊
/**
* Checks if the server name is equal to localhost in the servlet request.
*
* @param request
* servlet request
* @return true if the server name is equal to localhost.
*/
public boolean isLocalHost(@Nonnull final ServletRequest request) {
return settings != null && settings.getString(LOCALHOST) != null && settings.getString(LOCALHOST).equals(request.getServerName());
}
但是Sonarqube一直抱怨getString
可能為空,即使從我的判斷來看,由於布爾短路也不會發生
SonarQube無法識別連續的settings.getString
調用將返回相同值的事實。
可能是正確的,因為其他線程可以在調用之間修改設置。
因此,為注釋中提到的@Andreas分配變量值應該可以解決此問題。
UPD :
public boolean isLocalHost(@Nonnull final ServletRequest request) {
if(settings == null) {
return false;
}
String localhost = settings.getString(LOCALHOST);
return localhost != null && localhost.equals(request.getServerName());
}
或者從另一側檢查變量:
public boolean isLocalHost(@Nonnull final ServletRequest request) {
String requestServerName = request.getServerName();
return settings != null && requestServerName != null && requestServerName.equals(settings.getString(LOCALHOST));
}
UPD2 :刪除了代碼片段之一,因為HttpServletRequest.getServerName()在並發使用中偶爾返回null嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.