[英]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
上調用了setInt
和setString
,如果它在那里是null
,那么它會拋出一個NullPointerException
,因此永遠不會達到你的if
。
另請注意,根據其文檔 , preparedStatement
不能返回null
。 它只能返回有效語句或拋出異常。 在后一種情況下,您的if
也將無法達到。 但是,編譯器不會檢查這一事實(因為prepareStatement
的破壞實現理論上可以返回null
)。
在調用p
上的任何方法之前,您需要執行null
檢查。 如果p為null
,則永遠不會到達該行。
如果p
為null
則在第二行本身會拋出“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.