第49条:检查参数的有效性

这部分内容跟《程序员修炼之道》中契约式编程的前置校验的思想很是相像。在方法的入口处添加校验可以实现fail early, 避免一些报错或计算出错误的结果。同时,主动的检验参数并抛出异常,还可以帮助程序员在报错时尽快的检查出问题所在。


检查参数有效性的方法主有以下4种:

  1. 使用注解校验入参,如@NotNull
  2. 在方法入口处使用if 校验入参,这类用法在系统中极为常见:
if (!checkXxxValid(xxx)) {
  OperationResult.getInstance().addErrorMessageAndBreak(failReason);
}
  1. 使用java自带的方法,如Objects的requireNonNull、checkFromIndexSize、 checkFromToIndex、checkIndex等
  2. 使用assert 断言,如 assert xxxx != null、assertEquals(x,y) 等。不过在我们的产品上这个开关是关闭的。

思考:
在方法的入口处做前置校验非常有必要,虽然我们在设计方法时,往往会跟调用方约定好“契约”, 但是代码的约束比文档或口头的约定更可靠。因此我们必须要根据契约做前置校验。

校验的范围:前置校验的范围应该跟契约保持一致,比契约多或者少都是不合理的。系统中最典型的用法应该是在接口的设计中,接口的入口处都要对入参进行校验,校验的规则与提供的文档保持一致。
读这段代码时,让我想起来了算费过程的一些方法,在计算时合同是必须的,否则会抛NPE。但是很多方法在设计时,没有做前置校验,都是在发生了报错之后再补的。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容