FindBugs:为什么我得到NP_NULL_PARAM_DEREF哪个更好?

时间:2013-09-03 08:48:40

标签: java findbugs

使用以下代码我得到 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

1 个答案:

答案 0 :(得分:0)

在你的评论中,你写的参数“可能”为空,但由于程序逻辑,它永远不会。 FindBugs不了解/理解逻辑。最好的方法是让FindBugs使用edu.umd.cs.findbugs.annotations.SuppressWarnings注释忽略此方法中的NP_NULL_PARAM_DEREF。见http://findbugs.sourceforge.net/manual/annotations.html