使用以下代码我得到 NP_NULL_PARAM_DEREF:方法调用为非空参数传递null :
public void calledAnywhereIDoNotCare() {
//[...]
//parameter could be null but shouldn't ever be by logic
method(parameter); //FindBugs says the problem is here
//[...]
}
public final ReturnType method(final ParameterType parameter) {
//this method do nothing but simply call anotherMethod()
return anotherMethod(parameter, false);
}
public final ReturnType anotherMethod(final ParameterType parameter, boolean boolParam) {
if (parameter == null) {
//just in case logic is wrong
throw new NullPointerException("I know it shouldn't be null by logic, but it is null!");
}
//do something very usefull
//[...]
}
所以,我的问题是:为什么我得到这个NP_NULL_PARAM_DEREF以及哪些更改会更好? 我是否因为声明参数final而得到了这个?或者因为没有捕获NullPointerException?我不想抓住它,它应该被抓到那里的某个地方。也许我应该声明在calledAnywhereIDoNotCare()中抛出NullPointerException?
感谢您的帮助。 TARL
答案 0 :(得分:0)
在你的评论中,你写的参数“可能”为空,但由于程序逻辑,它永远不会。 FindBugs不了解/理解逻辑。最好的方法是让FindBugs使用edu.umd.cs.findbugs.annotations.SuppressWarnings注释忽略此方法中的NP_NULL_PARAM_DEREF。见http://findbugs.sourceforge.net/manual/annotations.html