簡體   English   中英

Eclipse中不需要的死代碼警告

[英]Unwanted Dead Code Warning in 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;的行上root = e;

我查了死代碼,發現代碼帽沒有效果,因此會被java編譯器忽略。

但是,這個root是我班級中的私有字段,因此我的程序功能是必要的。

編譯器真的會忽略這個嗎? 我怎么能阻止它? 為什么它認為它是死代碼?

如果root是你的類中包含你發布的add方法的私有字段,那么,如你所說,行root = e; 不應該被Eclipse IDE認為是死代碼。

編譯器應該正常工作......它只是一個IDE警告。

我的猜測是Eclipse會執行某種代碼行走(類似於Cyclomatic復雜性工具)來確定代碼路徑並找到“死代碼”和“無法訪問的代碼”。

我會嘗試刷新,然后干凈並在IDE中構建。 如果這不能解決它,Eclipse可能會對死代碼的警告產生“誤報”。 這不是第一次......我同時使用Eclipse和IntelliJ IDEA,並且看到兩個IDE之前都錯誤地警告過代碼。 但是,盡管有IDE警告,我的代碼仍可正常編譯。

可能存在兩個問題:第一:問題是線根不是“用於”任何東西。 在findbugs中,同樣的錯誤被稱為“死存儲”,每個findbugs意味着:

此指令為局部變量賦值,但不會在任何后續指令中讀取或使用該值。 通常,這表示錯誤,因為從未使用計算的值。

請注意,此處的關鍵字是“常常”。

我會檢查並確保root正在按照您的預期使用,如果可能的話,正如Philip Tenn所提到的那樣,是誤報。

第二:您的問題可能與此問題有關

由於源不足以找到確切原因,我猜它與eclipse中與死代碼相關的問題有關。 您可以在此處此處查看一些問題。

看看你的條件。

Node<E> e = new Node<E>(element);
if (n == null) {
    // dead code here
}

此代碼已死,因為n == null始終為false。 您剛剛在上一行創建了一個新的Node<E>實例(無條件)。 新對象永遠不會為null。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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