蚂蚁金服宫孙:guava探究系列之优雅校验数据

优雅校验数据-前置条件

前言

根据防御式编程的要求, 在日常的开发中, 总少不了对函数的各种入参做校验, 以便保证函数能按照预期的流程执行下去. 比如各种费率的值就没可能是负数, 如果费率出现负数, 所以数据有问题, 我们需要做的事情就是把这些有问题的数据挑出来. 自己手写这些校验函数未免过于繁琐, 所幸的是我们需要的函数已经有现成的:

Guava 提供了一系列的静态方法用于校验函数和类的构造器是否符合预期, 并称其为前置条件(preconditions). 如果前置条件校验失败, 就会抛出一个指定的异常.

前置函数特征

目前的前置校验方法有如下特征:

须需要, 下面例子中的checkArgument函数可以替换成任何一个前置条件校验函数

  1. 这些前置方法一般接受一个布尔表达式作为入参,并判断表达是否为true, 格式如:
Preconditions.checkArgument(a>1)
// 如果表达式为false, 抛出IllegalArgumentException
  1. 除了用于判断的布尔表达式之外, 前置方法可以接受一个额外的Object作为入参, 在抛出异常的时候, 把Object.toString()作为异常信息, 如:
public enum ErrorDetail {
    SC_NOT_FOUND("404", "Resource could not be fount");
    // 省略部分内容
    @Override
    public String toString() {
        return "ErrorDetail{" + "code='" + code + '\'' + ", description='" + description + '\'' + '}';
    }
}
@Test
public void testCheckArgument() {
    Preconditions.checkArgument(1 > 2, ErrorDetail.SC_NOT_FOUND);
}
// 结果如下:
// java.lang.IllegalArgumentException: ErrorDetail{code='404', description='Resource could not be fount'}
  1. Guava的前置表达式还支持类似printf函数那样的格式化输出错误信息, 只不过出于兼容性和性能的考虑, 只支持使用%s指示符格式化字符串, 不支持其他类型. 如:
int i=-1;
checkArgument(i >= 0, "Argument was %s but expected nonnegative", i);
// 结果如下:
// java.lang.IllegalArgumentException: Argument was -1 but expected nonnegative

前置条件函数介绍

须注意的是, 下面介绍的checkArgument,&nb

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值