簡體   English   中英

Eclipse死代碼警告-為什么我得到它?

[英]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確定某些原因導致循環提前終止,則一定是由於以下原因之一:

  1. 條件始終為假。 但這會使身體無法觸及,因此在身體上出現了無法觸及的代碼錯誤。 不是你的情況

    例如:在這個例子中y++Dead代碼 ,但是body是Unreachable代碼

     for (int y = 0; false; y++) { System.out.println(y); } 
  2. 最后一條語句之前的一些語句終止了您的循環。 但隨后,某些身體將無法到達或死亡。 不是你的情況

    例如:在此示例中, y++Dead代碼 ,而printlnUnreachable代碼

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

    在此示例中, y++printlnDead代碼

     for (int y = 0; y < 10; y++) { if (true) { break; } System.out.println(y); } 
  3. 最后一條語句終止循環。 那只會使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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM