您好,我有一些代码被 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
对象做任何事情,我只是在做 Null 检查。该示例取自真实的生产代码,但删除了重现错误不需要的任何内容。我想知道这是否是误报。如果不是,什么是适当的修复。
这是 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
关于问题的对话将在那里继续。
最佳答案
我明白了。我可以在我的计算机上确认相同的 FB 行为。看起来确实很奇怪。有趣的是,如果您将 throw new NullPointerException
替换为 throw new RuntimeException
,错误标记就会消失。
现在我想我明白他们的意思了。消息的措辞不准确,但它们警告您不要使用 NPE。我猜他们认为明确抛出 NPE 是一种不好的做法。
关于java - 如何修复 Findbugs 问题 "Null value is guaranteed to be dereferenced"NP_GUARANTEED_DEREF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5329036/