在以下循环中,listeners
是数组列表。 Eclipse向我显示警告i++
是死代码。我现在已经完整地添加了完整的for循环,因为它存在于代码中。监听器被传递给函数,我不认为Eclipse有办法检测列表是否为空
for (int i = 0; i < listeners.size(); i++) {
listener = getMessageListener(i);
while (listener.isMessageAvailable()) {
fireJob(listener);
}
log.info("Placed all the pending jobs because of termination signal");
}
但是,以下简单循环不会生成相同的警告
for (int y = 0; y < 10; y++) {
System.out.println(y);
}
对我来说,两者看起来功能相同 - 循环标准。 Eclipse非常具体地突出显示i++
区域,修复方法是删除i++
。
另一个观察是,如果我将相同的循环复制到其他地方,我就不会收到警告。所以有一种可能性就是eclipse可以考虑循环赢得的任何原因。但是块中的代码会被执行。
答案 0 :(得分:1)
有一种想法:如果您注释掉log.info(...
行,警告会消失吗?因为如果Eclipse确定某些东西导致循环提前终止,则必须是因为以下原因之一:
条件总是错误的。但这会使身体无法访问,因此身体上出现无法访问代码错误。 不是你的情况
例如:在此示例中,y++
是死代码,但正文是无法访问的代码。
for (int y = 0; false; y++) {
System.out.println(y);
}
在最后一个语句之前的一些语句正在终止你的循环。但是,然后一些身体将无法到达或死亡。 不是你的情况
例如:在此示例中,y++
是死代码,无法访问代码中的println
。
for (int y = 0; y < 10; y++) {
break;
System.out.println(y);
}
在此示例中, y++
和println
是死代码。
for (int y = 0; y < 10; y++) {
if (true) {
break;
}
System.out.println(y);
}
last语句终止循环。这只会使i++
死代码。 不是你的情况,但是应该通过评论最后一个陈述来测试它不是你的情况。
例如:在此示例中,只有y++
死代码,但注释掉break
表示没有死代码。
for (int y = 0; y < 10; y++) {
System.out.println(y);
break;
}
所以,我相信,如果在循环中注释掉最后一个语句(在你的情况下为log
行)并没有使死代码警告消失,你一定找到了一个bug在警告生成器/编译器中。如果是这样,我希望你可以减少它,以便提交适当的错误报告。