为什么我会得到一个“;“死代码”;此Java代码中的警告?
有人能告诉我,如果(projectId!=null),为什么在为什么我会得到一个“;“死代码”;此Java代码中的警告?,java,dead-code,Java,Dead Code,有人能告诉我,如果(projectId!=null),为什么在的else分支中会出现死代码警告?如果我做对了,解释器认为projectId永远不能为空-是这样吗?在我看来这是不可能的 Integer projectId = null; if (!sprintTaskConnections.isEmpty()) projectId = sprintTaskConnections.get(0).getProjectId(); // init name, state, startDate,
的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));
或者
在前面
if (!sprintTaskConnections.isEmpty())
projectId = sprintTaskConnections.get(0).getProjectId();
结果总是一样的
请帮帮我,我现在不明白 projectId很有可能总是空的,因此“if”中的代码永远不会被执行我没有JiraSprint
代码,因此我无法确认这一点,但我怀疑JiraSprint构造函数在传入projectId时使用int
,而不是整数。这迫使Java自动取消对整数的装箱。如果整数projectId
为null,则会在那里得到NullPointerException
(因为自动取消装箱),因此甚至不会到达If块。因此,projectId不能为null。可能:
new JiraSprint(..)
获取int projectId
在这种情况下,如果projectId
为null
,则此行:
JiraSprint sprint = new JiraSprint(sprintInfo.getInt("id"), name, state, projectId, startDate, endDate);
将抛出NPE,因此projectId
不能在此行后为null
。谁发出此警告?你是什么意思?你忘了打开停止的问题解决程序。这只是一个警告吗?您正在执行的检查似乎是一个聪明的设计,因此您可以忽略警告…但是我需要更多关于“if(!sprintTaskConnections.isEmpty())”@nidhoeggr09的详细信息,但是您使用的是什么IDE/编译器?可能是不相关的问题,但是为什么要麻烦获取所有配置信息,因为sprintTaskConnections
是空的?你会预先知道它会失败,不管怎样,稍后会抛出几行……但它是在这里分配的-projectId=sprintTaskConnections.get(0).getProjectId()代码>。仅当!sprintTaskConnections.isEmpty()否,如果sprintTaskConnections
不为空,projectId
将获得分配的值。死代码是else部分中的代码。也就是说,编译器认为projectId永远不会为空。你是对的,我完全没有抓住要点,错误的wifttomato确实指出了不太明显的地方,实际上这更有可能+你是我今天的英雄!非常感谢。
JiraSprint sprint = new JiraSprint(sprintInfo.getInt("id"), name, state, projectId, startDate, endDate);