您好我有一些被Findbugs報告爲具有NP_GUARANTEED_DEREF問題的代碼。 現在看我的代碼,我不太明白它有什麼問題,任何人都可以提出什麼問題。如何解決FindBugs問題「空值保證被取消引用」NP_GUARANTEED_DEREF
public void test() {
String var = "";
int index = 2;
if (index == -1) {
var = String.class.getName();
if (var.length() == 0) {
var = null;
}
} else {
var = Integer.class.getName();
if (var.length() == 0) {
var = null;
}
}
if (var == null) {// FINBUGS reports on this line NP_GUARANTEED_DEREF
/*
* There is a statement or branch that if executed guarantees that a value
* is null at this point, and that value that is guaranteed to be
* dereferenced (except on forward paths involving runtime exceptions).
*/
throw new NullPointerException("NULL");
}
}
現在鑽進在FindBugs的它突出兩個分配給var = null;
爲事業,爲錯誤的錯誤,但我不明白爲什麼。這不是我實際上正在做任何與var
對象有關的事情,我只是在做一個空檢查。這個例子是從真實的生產代碼中提取的,但是沒有任何不需要的來重現錯誤。我想知道這是否是誤報。如果不是什麼將是一個適當的修復。
這裏是鏈接到FindBugs的錯誤詳細信息:http://findbugs.sourceforge.net/bugDescriptions.html#NP_GUARANTEED_DEREF
[更新]關於這個問題我現在已經在FindBugs的錯誤追蹤Sourceforge上的鏈接登錄這是一個假陽性recieving一些反饋後爲https://sourceforge.net/tracker/?func=detail&aid=3277814&group_id=96405&atid=614693
關於這個問題的討論將會繼續。
你有沒有'var.equals(null)'之前?你確定你已經在該文件上重新運行Findbugs(我通常做的是我稱之爲「乾淨的bug標記」)。 – 2011-03-16 21:43:51
是的,我相信我已經重新運行Findbugs,並且如果它很容易被理解,它從來就不是'var.equals(null)'。由於jzd說這看起來不錯。如果我得到更多的確認,這看起來不錯,我可能會發佈一個錯誤(錯誤肯定)Findbugs – AGrunewald 2011-03-16 21:49:01
我看到。我可以在我的電腦上確認相同的FB行爲。看起來確實很奇怪。有趣的是,如果你用'throw new RuntimeException'替換拋出新的NullPointerException,錯誤標記就會消失。 – 2011-03-16 22:32:53