[英]Eclipse dead code warning - why am I getting it?
在以下循環中, 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++
。
另一個觀察結果是,如果我將同一循環復制到其他地方,則不會得到警告。 因此,一種可能性是日食可能會出於某種原因考慮將不會執行循環。 但是塊中的代碼被執行了。
一個想法:如果您注釋掉log.info(...
行,警告會消失嗎?因為如果Eclipse確定某些原因導致循環提前終止,則一定是由於以下原因之一:
條件始終為假。 但這會使身體無法觸及,因此在身體上出現了無法觸及的代碼錯誤。 不是你的情況
例如:在這個例子中y++
是Dead代碼 ,但是body是Unreachable代碼 。
for (int y = 0; false; y++) { System.out.println(y); }
最后一條語句之前的一些語句終止了您的循環。 但隨后,某些身體將無法到達或死亡。 不是你的情況
例如:在此示例中, y++
為Dead代碼 ,而println
為Unreachable代碼 。
for (int y = 0; y < 10; y++) { break; System.out.println(y); }
在此示例中, y++
和println
為Dead代碼 。
for (int y = 0; y < 10; y++) { if (true) { break; } System.out.println(y); }
最后一條語句終止循環。 那只會使i++
Dead代碼成為可能 。 不是您的情況 ,但應通過注釋掉最后一條語句來證明不是您的情況。
例如:在這個例子中,只有y++
是Dead代碼 ,但是注釋掉break
意味着沒有Dead代碼 。
for (int y = 0; y < 10; y++) { System.out.println(y); break; }
因此,我相信,如果注釋掉循環中的最后一條語句(在您的情況下為log
行)並不能使Dead代碼警告消失,那么您一定在警告生成器/編譯器中發現了一個錯誤。 如果是這樣,我希望您能為我們所有的緣故減少它,以便可以提交適當的錯誤報告。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.