IF声明中的死代码警告

时间:2012-07-03 06:17:17

标签: java warnings

我不知道为什么eclipse会警告我" Dead Code"在我的这段代码中:

    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;
    }

警告在日志中,有人可以告诉我这个原因吗?谢谢。

3 个答案:

答案 0 :(得分:9)

那时

p不能null,只是因为您已在setInt上调用了setStringp,如果它是null那里,它会抛出一个NullPointerException,从而永远不会到达你的if

另请注意,根据its documentationpreparedStatement无法返回null。它只能返回有效语句或抛出异常。在后一种情况下,您的if 也无法联系到。但是,这个事实是由编译器检查(因为prepareStatement 损坏的实现理论上可以返回{{1} })。

答案 1 :(得分:0)

在调用null上的任何方法之前,您需要执行p检查。如果p为null,则它永远不会到达该行。

答案 2 :(得分:-1)

如果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;
}

或在使用if loop

之前带上p
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"));