为什么我在这个Java代码中收到“死代码”警告?

时间:2013-09-17 12:36:06

标签: java dead-code

有人请告诉我为什么我在if (projectId != null)的else分支中收到死代码警告?如果我做对了,解释器认为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();

结果总是一样的!

请帮助我,我现在还没有得到它!

3 个答案:

答案 0 :(得分:11)

我没有JiraSprint代码,所以我无法确认这一点,但我怀疑JiraSprint构造函数需要int传递projectId,而不是{{1} }。这迫使Java自动取消整理整数。如果整数Integer为空,那么您将获得projectId(因为自动取消装箱),因此您甚至无法访问if块。因此,projectId不能为null。

答案 1 :(得分:1)

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

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

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

会抛出NPE,因此projectId在此行之后不能为null

答案 2 :(得分:-3)

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