我们是否应该始终在第一行中检查java中方法的每个参数是否为null?

San*_*ngi 23 java validation parameters methods null

每个方法都接受一组参数值.我们是否应该始终验证输入参数的非零值或允许代码失败RunTimeException

我看过很多代码,人们并没有真正检查输入参数的空值,只是使用参数编写业务逻辑.什么是最好的方法?

void public( String a, Integer b, Object c)
{
  if( a == null || b == null || c == null)
  {
    throw new RunTimeException("Message...");
  }
  .....business logic.....
}
Run Code Online (Sandbox Code Playgroud)

ilu*_*uxa 25

最好的方法是只在必要时进行检查.

private例如,如果您的方法是,因此您知道没有其他人正在使用它,并且您知道您没有传入任何空值,则无需再次检查.

如果你的方法是public,谁知道你的API的用户会尝试做什么,那么更好的检查.

如有疑问,请检查.

但是,如果你可以做的最好的是抛出一个NullPointerException,那么可能不想检查.例如:

int getStringLength(String str) {
  return str.length();
}
Run Code Online (Sandbox Code Playgroud)

即使你检查过null,一个合理的选择就是投掷一个NullPointerException,str.length()无论如何都会为你做.

  • 我不建议依靠自动NullPointerException代替显式参数验证.有两个原因:(a)验证应该尽可能早地发生(认为方法在遇到NPE之前改变一些状态)和(b)代码支持性.X类主体中的NPE将首先转到类X的所有者,因为它看起来像是实现中的错误.但是,如果你明确地检查args是否为null并抛出IllegalArgumentException(也像NPE那样的RuntimeException),那么问题显然是问题是X类的调用者. (35认同)

Rob*_*ond 5

不。假设参数不会为空并且否则将抛出 NullPointerException 是标准的。如果您的方法允许参数为空,则应在 api 中说明。