不需要死代码警告在Eclipse
问题描述:
下面的代码给了我一个“死代码”警告在Eclipse:不需要死代码警告在Eclipse
private void add(Node<E> n, E element) {
Node<E> e = new Node<E>(element);
if (n == null)
root = e;
else if (n.compareTo(e) > 0)
if (n.hasLeft())
add(n.getLeft(), element);
else
n.setLeft(e);
else if (n.hasRight())
add(n.getRight(), element);
else
n.setRight(e);
balance(e);
}
警告出现在写着root = e;
行。
我抬头看看死代码,发现它是没有效果的代码,因此会被java编译器忽略。
但是,这个根是我的班级中的私人领域,因此我需要为我的程序的功能做到这一点。
编译器真的会忽略这个吗?我怎么能阻止呢?它为什么认为这是死代码?
答
如果root
是您的类中包含您发布的add
方法的私有字段,则如您所说,那么不应将Eclipse线路root = e;
视为死代码。
编译器应该可以正常工作......它只是一个IDE警告。我的猜测是Eclipse会执行某种代码遍历(类似于Cyclomatic复杂工具)来确定代码路径并找到“死代码”和“无法访问的代码”。
我会尝试刷新,然后做一个干净的和建立在IDE中。如果没有解决这个问题,Eclipse可能会对死代码发出警告“误报”。不会是第一次......我同时使用Eclipse和IntelliJ IDEA,并且看到两个IDE在代码之前都错误地提醒过代码。不过,尽管有IDE警告,我的代码仍然可以编译。
答
可能出现两个问题:第一:问题是行根没有被“使用”。在FindBugs的相同的错误被称为“死店”当中,每findbugs指:
该指令将一个值分配给本地变量,但该值不被读取或以任何后续指令使用。通常,这表示出现错误,因为计算的值从不使用。
请注意,此处的关键字是“经常”。
我会检查并确保root的使用正如你所期望的那样,如果是这样的话,正如Philip Tenn所说的那样,是一种误报。
第二:您的问题可能与this issue有关。
是那个实际的代码? – 2013-02-22 01:53:54
做一次清理并重新编译代码,Eclipse偶尔错误一次。 – 2013-02-22 01:55:02
我认为唯一可能发生的情况是,如果root不可能为空。也许看看这个变量的用处。 – austin 2013-02-22 01:55:21