5

有人能告诉我为什么我在 else 分支中收到死代码警告if (projectId != null)吗?如果我做对了,解释器认为projectId永远不能为空 - 对吗?在我看来这是不可能的...

Integer projectId = null;

if (!sprintTaskConnections.isEmpty())
    projectId = sprintTaskConnections.get(0).getProjectId();

// init name, state, startDate, endDate here

JiraSprint sprint = new JiraSprint(sprintInfo.getInt("id"), name, state, projectId, startDate, endDate);

if (projectId != null)
{
   ...
}

即使我放了一个

sprintTaskConnections.add(new JiraSprintTaskConnection(1, 1, 1));

或一个

sprintTaskConnections.clear();

在...前面

if (!sprintTaskConnections.isEmpty())
projectId = sprintTaskConnections.get(0).getProjectId();

结果总是一样的!

请帮帮我,我只是现在不明白!

4

3 回答 3

11

我没有JiraSprint代码,所以我无法确认这一点,但我怀疑 JiraSprint 构造函数采用int你传入 projectId 而不是Integer. 这会强制 Java 自动拆箱 Integer。如果 IntegerprojectId为空,您将在那里得到一个NullPointerException(由于自动拆箱),因此您甚至不会进入 if 块。因此,projectId 不能为空。

于 2013-09-17T12:44:31.347 回答
1

也许: new JiraSprint(..)得到int projectId

在这种情况下,如果projectIdnull,这一行:

JiraSprint sprint = new JiraSprint(sprintInfo.getInt("id"), name, state, projectId, startDate, endDate);

会抛出 NPE,所以projectId不能null在这条线之后。

于 2013-09-17T12:48:34.280 回答
-3

projectId 很有可能永远为空,因此“if”中的代码永远不会被执行

于 2013-09-17T12:39:39.057 回答