簡體   English   中英

IF聲明中的死代碼警告

[英]Dead Code Warning in IF Statement

我不知道為什么eclipse在我的這段代碼中警告我“死代碼”:

    PreparedStatement p = conn.prepareStatement("SELECT name FROM user WHERE age = ? , city = ?");
    p.setInt(1, (String) parameters.get("age"));
    p.setString(2, (String) parameters.get("city"));

    if (p == null) {
        log.warn("User is not available");
        return results;
    }

警告在日志中,有人可以告訴我這個原因嗎? 謝謝。

那時p不能為null ,只是因為你已經在p上調用了setIntsetString ,如果它在那里是null ,那么它會拋出一個NullPointerException ,因此永遠不會達到你的if

另請注意,根據其文檔preparedStatement不能返回null 它只能返回有效語句或拋出異常。 在后一種情況下,您的if 將無法達到。 但是,編譯器不會檢查這一事實(因為prepareStatement破壞實現理論上可以返回null )。

在調用p上的任何方法之前,您需要執行null檢查。 如果p為null ,則永遠不會到達該行。

如果pnull則在第二行本身會拋出“NullPointerException”。

改變代碼如下

PreparedStatement p = conn.prepareStatement("SELECT name FROM user WHERE age = ? , city = ?");
if(p != null){
    p.setInt(1, (String) parameters.get("age"));
    p.setString(2, (String) parameters.get("city"));
}else{
    log.warn("User is not available");
    return results;
}

或者在使用p之前帶上if loop

PreparedStatement p = conn.prepareStatement("SELECT name FROM user WHERE age = ? , city = ?");
if (p == null) {
    log.warn("User is not available");
    return results;
}
p.setInt(1, (String) parameters.get("age"));
p.setString(2, (String) parameters.get("city"));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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