簡體   English   中英

我該如何解決squid:S2259`NullPointerException可能會被拋出,因為'getString'在這里可以為空。

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM