gpt4 book ai didi

java - Eclipse 死代码警告 - 为什么我会收到它?

转载 作者:行者123 更新时间:2023-12-01 10:36:35 26 4
gpt4 key购买 nike

在下面的循环中,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);
}

对我来说,两者看起来功能相同——标准的 for 循环。 Eclipse 对于突出显示 i++ 区域非常具体,修复方法是删除 i++

另一个观察结果是,如果我将相同的循环复制到其他地方,我不会收到警告。因此一种可能性是 Eclipse 可能会认为由于某种原因循环不会被执行。但是 block 中的代码会被执行。

最佳答案

一个想法:如果注释掉 log.info(... 行,警告会消失吗?因为如果 Eclipse 确定某些原因导致循环提前终止,那一定是因为以下之一:

  1. 条件始终为假。但这会使主体无法访问,因此主体上会出现无法访问代码错误。 不是你的情况

    例如:在此示例中,y++死代码,但正文是无法访问的代码

    for (int y = 0; false; y++) {
    System.out.println(y);
    }
  2. 最后一条语句之前的某些语句正在终止循环。但随后尸体的某些部分将无法到达或死亡。 不是你的情况

    例如:在此示例中,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);
    }
  3. 最后一条语句终止循环。这只会产生 i++ 死代码不是您的情况,但应该可以通过注释掉最后一条语句来测试这不是您的情况。

    例如:在此示例中,只有 y++死代码,但是注释掉 break 意味着不存在死代码.

    for (int y = 0; y < 10; y++) {
    System.out.println(y);
    break;
    }

因此,我相信,如果注释掉循环中的最后一条语句(在您的情况下为 log 行)不会使 死代码 警告消失,您必须在警告生成器/编译器中发现了一个错误。如果是这样,我希望您可以为了我们所有人的利益而减少它,以便可以提交正确的错误报告。

关于java - Eclipse 死代码警告 - 为什么我会收到它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34684411/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com