Guava中Preconditions校验

Guava中Preconditions校验

    • 场景引入
    • [Guava 参数校验 Preconditions](#Guava 参数校验 Preconditions)

场景引入

提出疑问?为什么不直接使用 jsr330校验注解对实体类进行校验呢?

答:不同的场景,如短信码验证登录,账号密码登录此类的实体,对于字段是否必填并不是必须的。

java 复制代码
@Data
class UserLoginDTO {
    // @NotBlank(message = "手机号不能为空")
    private String phone;

    // @NotBlank(message = "验证码不能为空")
    private String code;
    
    // @NotBlank(message = "密码不能为空")
    private String password;
}

应对这样的dto实体,只能在业务中进行判空处理,如下面的操作:

java 复制代码
if (StringUtils.isBlank(userLoginDTO.getPhone())) {
    // ...
}
if (StringUtils.isBlank(userLoginDTO.getCode())) {
    // ...
}
if (StringUtils.isBlank(userLoginDTO.getPassword())) {
    // ...
}

如果输入参数少的时候,还好,如果很多就会变成大量的if(判空操作),很不优雅...

此时就可以使用 guava 的 Preconditions来完成上面的判空操作了,如:

java 复制代码
Preconditions.checkArgument(StringUtils.isNotBlank(userLoginDTO.getPhone()), "手机号不能为空");
Preconditions.checkArgument(StringUtils.isNotBlank(userLoginDTO.getCode()), "验证码不能为空");
Preconditions.checkArgument(StringUtils.isNotBlank(userLoginDTO.getPassword()), "密码不能为空");

Guava 参数校验 Preconditions

pom 依赖引入

xml 复制代码
<dependency>
  <groupId>com.google.guava</groupId>
  <artifactId>guava</artifactId>
  <version>版本号</version>
</dependency

常用的方法

简单的列举Guava中Preconditions类的一些常用校验方法:

方法名 描述 抛出异常
checkArgument(boolean expression, String errorMessageTemplate, Object... errorMessageArgs) 校验方法参数。如果expressionfalse,则抛出IllegalArgumentException IllegalArgumentException
checkNotNull(T reference) 校验reference不为null。如果为null,则抛出NullPointerException NullPointerException
checkNotNull(T reference, String errorMessage) 类似于checkNotNull(T reference),但允许提供一个错误消息 NullPointerException
checkState(boolean expression) 校验程序状态。如果expressionfalse,则抛出IllegalStateException IllegalStateException
checkState(boolean expression, String errorMessageTemplate, Object... errorMessageArgs) 类似于checkArgument,但抛出的是IllegalStateException IllegalStateException
checkElementIndex(int index, int size, String desc) 校验索引是否有效(大于等于0且小于size)。如果无效,则抛出IndexOutOfBoundsException IndexOutOfBoundsException
checkPositionIndex(int index, int size, String desc) 类似于checkElementIndex,但允许索引等于size IndexOutOfBoundsException
checkPositionIndexes(int start, int end, int size, String desc) 校验起始和结束索引是否有效,用于表示子序列范围 IndexOutOfBoundsException
相关推荐
二月夜14 天前
告别繁琐的比较器:掌握 Google Guava 的 Ordering 工具类
guava
二月夜14 天前
深入理解 Guava 新集合类型:超越 JDK 的数据结构利器
guava
文艺倾年16 天前
【源码精讲+简历包装】LeetcodeRunner—手搓调试器轮子(20W字-上)
java·jvm·人工智能·tomcat·编辑器·guava
shuair1 个月前
guava布隆过滤器及cuckoo过滤器
redis·guava
廋到被风吹走1 个月前
【缓存优化】缓存穿透:布隆过滤器(Guava/RedisBloom)
缓存·guava
xdpcxq10291 个月前
Spring AOP + Guava RateLimiter 用注解实现优雅限流
spring·wpf·guava
ejinxian1 个月前
Google Guava实战
guava·工具库
程序员乐只1 个月前
基于Python+Django+SSM热门旅游景点推荐系统(源码+LW+调试文档+讲解等)/热门旅游地推荐平台/旅游景点推荐软件/热门景点推荐系统/旅游推荐系统/旅游景点热门推荐
spring boot·spring·tomcat·hibernate·java-zookeeper·guava·java-consul
沛沛老爹2 个月前
2025年java总结:缝缝补补又一年?
java·开发语言·人工智能·python·guava·总结·web转型ai
PacosonSWJTU2 个月前
Guava缓存使用入门
java·缓存·guava