Java:验证null的方法参数的最佳方法是什么

时间:2014-01-30 18:13:11

标签: java nullpointerexception method-invocation null-check

调用方法时验证null参数的最佳方法是什么?

1)在进行方法调用之前

private void myMethod(String param1, String param2){
   String a = param2;
   if(StringUtils.isNotBlank(a)){   
      validate(a);
   }
}

private void validate(String a) {
    int temp = Integer.parseInt(a);
    if(a > 4){
          addError()
    }
}

2)一旦收到参数

,在方法内部
private void myMethod(String param1, String param2){
   String a = param2;
   validate(a);       
}

private void validate(String a) {
     if(StringUtils.isNotBlank(a)){
         int temp = Integer.parseInt(a);
         if(a > 4){
            addError()
         }
     }
}

或两者

6 个答案:

答案 0 :(得分:4)

IMO,StringUtils.isNotBlank(a)仅是某种形式的验证,因此它应该采用validate()方法。如果每次调用validate()方法时都必须检查,那么将它移动到那里肯定会更有意义。

答案 1 :(得分:2)

从你给出的两种方法来看,第二种方法更好。

原因:DRY principle(不要重复自己,也就是避免代码重复)。

调用每个地方validate()的代码中的第一个剪切副本(或三次重复等)中的代码“

一致性,“非空白”不变量(域/业务规则)的责任属于validate()方法(固有),因此它应该负责处理它。

实际上:考虑更改此域规则的可能性,如果需要添加一些新的检查,在什么情况下您必须更少(因此不易出错)?那些做出改变的开发者会期望找到这样的规则吗?在validate()中还是分散在整个代码库中?

答案 2 :(得分:0)

如果每次调用某个方法时该错误验证都很有用,那么显然应该在方法内部完成,否则你必须在调用该方法之前每次都这样做。请记住对代码进行评论,以便稍后再记住。

答案 3 :(得分:0)

将抛出java.lang.IllegalArgumentException的方法。 像:

private void validate(String a) {
 if(StringUtils.isNotBlank(a)){
     int temp = Integer.parseInt(a);
     if(a > 4){
        addError()
     }
 }
else{
    throw new IllegalArgumentException("argument must not be null or blank");
}

}

答案 4 :(得分:0)

从概念上讲,validate()方法应该能够识别传递参数是否为null。因此,在您的给定方案中,方法2应该更可取。

答案 5 :(得分:0)

  

验证参数的最佳方法是什么

IMO,你的第二种方法更好 因为它不是一个任务,你必须提供一个单独的方法,它只是一个参数验证,它是你要在你的实现中实现的相同逻辑的一部分方法。另一件需要考虑的事情是第二种方法会形成更高的代码可重复性。

  

或两者

从不,根据您的编码习惯选择一个并坚持下去。

验证的其他注意事项:

  1. Check parameters annotated with @Nonnull for null?
  2. 您可以将assertion用于Private个参数。