嗨,我有一些代码被 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
[更新] 在收到有关此问题的一些反馈后,我现在已在 Sourceforge 上的 Findbugs Bugtracker 中将此记录为误报,链接为https://sourceforge.net/tracker/?func=detail&aid=3277814&group_id=96405&atid=614693
关于这个问题的对话将在那里继续。