1

在调用方法时验证 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()
         }
     }
}

或两者

4

6 回答 6

4

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

于 2014-01-30T18:15:04.547 回答
2

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

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

第一个剪切重复(或三次重复等)中的代码调用每个位置的代码的“检查空白”部分validate()

一致性的责任,“非空白”不变量(域/业务规则),属于(固有的)validate()方法,所以它应该有责任照顾它。

实际上:考虑更改此域规则的可能性,如果需要对其添加一些新检查,在什么情况下您必须更改更少(因此更不容易出错)?将进行更改的开发人员希望在哪里找到这样的规则?在validate()还是分散在整个代码库中?

于 2014-01-30T18:16:16.433 回答
0

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

于 2014-01-30T18:20:01.580 回答
0

如果每次调用某个方法时该错误验证都很有用,那么显然应该在方法内部完成,否则每次调用该方法之前都必须这样做。只需记住注释代码,以便您稍后记住。

于 2014-01-30T18:15:31.297 回答
0

验证论点的最佳方法是什么

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

或两者

永远不要,根据您的编码实践选择一个并坚持下去。

验证的其他注意事项:

  1. 检查用@Nonnull 注释的参数是否为空?
  2. 您可以将断言用于Private参数。
于 2014-01-30T18:31:06.967 回答
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");
}

}

于 2014-01-30T18:18:52.313 回答