转自:https://blog.csdn.net/gokeiryou263/article/details/19612471

断言工具类:Assert类,

java.lang.Object --->org.springframework.util.Assert
 
先举个例子,

当我们在编写类的方法时,常常需要对方法入参进行合法性检查,如果入参不符合要求,方法将通过抛出异常的方式拒绝后续处理。如下所示:

public InputStream getData(String file) {

if (file == null || file.length() == 0|| file.replaceAll("\\s", "").length() == 0) {

throw new IllegalArgumentException("file入参不是有效的文件地址");

}

}

类似以上检测方法入参的代码是非常常见,但是在每个方法中都使用手工编写检测逻辑的方式并不是一个好主意。阅读 Spring 源码,您会发现 Spring 采用一个 org.springframework.util.Assert 通用类完成这一任务。

Assert 翻译为中文为“断言”,使用过 JUnit 的读者都熟知这个概念,它断定某一个实际的运行值和预期想一样,否则就抛出异常。Spring 对方法入参的检测借用了这个概念,其提供的 Assert 类拥有众多按规则对方法入参进行断言的方法,可以满足大部分方法入参检测的要求。这些断言方法在入参不满足要求时就会抛出 IllegalArgumentException。下面,我们来认识一下 Assert 类中的常用断言方法:

断言方法 说明
notNull(Object object) 当 object 为 null 时抛出异常,notNull(Object object, String message) 方法允许您通过 message 定制异常信息。和 notNull() 方法断言规则相反的方法是 isNull(Object object)/isNull(Object object, String message),它要求入参一定是 null;
isTrue(boolean expression) / isTrue(boolean expression, String message) 当 expression 不为 true 抛出异常;
notEmpty(Collection collection) / notEmpty(Collection collection, String message) 当集合未包含元素时抛出异常。notEmpty(Map map) / notEmpty(Map map, String message) 和 notEmpty(Object[] array, String message) / notEmpty(Object[] array, String message) 分别对 Map 和 Object[] 类型的入参进行判断;
hasLength(String text) / hasLength(String text, String message) 当 text 为 null 或长度为 0 时抛出异常;
hasText(String text) / hasText(String text, String message) text 不能为 null 且必须至少包含一个非空格的字符,否则抛出异常;
isInstanceOf(Class clazz, Object obj) / isInstanceOf(Class type, Object obj, String message) 如果 obj 不能被正确造型为 clazz 指定的类将抛出异常;
isAssignable(Class superType, Class subType) / isAssignable(Class superType, Class subType, String message) subType 必须可以按类型匹配于 superType,否则将抛出异常;

使用 Assert 断言类可以简化方法入参检测的代码,如 InputStream getData(String file) 在应用 Assert 断言类后,其代码可以简化为以下的形式:

public InputStream getData(String file){
         Assert.hasText(file,"file入参不是有效的文件地址");
         ① 使用 Spring 断言类进行方法入参检测
          …
 }

可见使用 Spring 的 Assert 替代自编码实现的入参检测逻辑后,方法的简洁性得到了不少的提高。Assert 不依赖于 Spring 容器,您可以大胆地在自己的应用中使用这个工具类。

方法摘要
static void doesNotContain(java.lang.String textToSearch, java.lang.String substring)
          断言,给定的文本不包含给定的子串。
static void doesNotContain(java.lang.String textToSearch, java.lang.String substring, java.lang.String message)
          断言,给定的文本不包含给定的子串。
static void hasLength(java.lang.String text)
          断言,由于String是不是空的,也就是说,它不能null ,而不是空字符串。
static void hasLength(java.lang.String text, java.lang.String message)
          断言,由于String是不是空的,也就是说,它不能null ,而不是空字符串。
static void hasText(java.lang.String text)
          断言定String具有有效的文本内容,即它不能null ,并且必须至少包含一个非空格字符。
static void hasText(java.lang.String text, java.lang.String message)
          断言定String具有有效的文本内容,即它不能null ,并且必须至少包含一个非空格字符。
static void isAssignable(java.lang.Class superType, java.lang.Class subType)
          断言superType.isAssignableFrom(subType)是true 。
static void isAssignable(java.lang.Class superType, java.lang.Class subType, java.lang.String message)
          断言superType.isAssignableFrom(subType)是true 。
static void isInstanceOf(java.lang.Class clazz, java.lang.Object obj)
          断言提供的对象是所提供的类的实例。
static void isInstanceOf(java.lang.Class type, java.lang.Object obj, java.lang.String message)
          断言提供的对象是所提供的类的实例。
static void isNull(java.lang.Object object)
          断言一个对象是null 。
static void isNull(java.lang.Object object, java.lang.String message)
          断言一个对象是null 。
static void isTrue(boolean expression)
          断言一个布尔表达式,扔IllegalArgumentException如果测试结果是false 。
static void isTrue(boolean expression, java.lang.String message)
          断言一个布尔表达式,扔IllegalArgumentException如果测试结果是false 。
static void noNullElements(java.lang.Object[] array)
          断言一个数组没有null元素。
static void noNullElements(java.lang.Object[] array, java.lang.String message)
          断言一个数组没有null元素。
static void notEmpty(java.util.Collection collection)
          断言,一个集合有元素,也就是说,它不能null ,而且必须有至少一个元素。
static void notEmpty(java.util.Collection collection, java.lang.String message)
          断言,一个集合有元素,也就是说,它不能null ,而且必须有至少一个元素。
static void notEmpty(java.util.Map map)
          断言,一个地图的作品,也就是说,它不能null ,并且必须至少有一个条目。
static void notEmpty(java.util.Map map, java.lang.String message)
          断言,一个地图的作品,也就是说,它不能null ,并且必须至少有一个条目。
static void notEmpty(java.lang.Object[] array)
          断言一个数组元素,即它不能null ,而且必须有至少一个元素。
static void notEmpty(java.lang.Object[] array, java.lang.String message)
          断言一个数组元素,即它不能null ,而且必须有至少一个元素。
static void notNull(java.lang.Object object)
          断言一个对象不null 。
static void notNull(java.lang.Object object, java.lang.String message)
          断言一个对象不null 。
static void state(boolean expression)
          断言一个布尔表达式,扔IllegalStateException如果测试结果是false 。
static void state(boolean expression, java.lang.String message)
          断言一个布尔表达式,扔IllegalStateException如果测试结果是false 。
 
从类 java.lang.Object 继承的方法
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
---------------------
作者:gokeiryou263
来源:CSDN
原文:https://blog.csdn.net/gokeiryou263/article/details/19612471
版权声明:本文为博主原创文章,转载请附上博文链接!

java编程中的断言工具类(org.springframework.util.Assert)相关推荐

  1. java并发编程中常用的工具类 Executor

    /***************************************************  * TODO: description .  * @author: gao_chun  * ...

  2. java dateutils_Java中简单日期工具类DateUtils的实现

    最近工作时经常处理日期,想起以前sql server中datediff,dateadd 等方法非常好用,于是想在java中实现类以的功能,而且提高精度,所以初步有了以下代码: package com. ...

  3. java 项目中常用的工具类总结

    1.文件 1.根据图片的链接,下载图片 package com.lingxu.module.BigDataJoinMessage.util;import java.io.FileOutputStrea ...

  4. Java并发中常用同步工具类

    为什么80%的码农都做不了架构师?>>>    同步工具类可以是任何一个对象,只要它根据其自身的状态来协调线程控制流.阻塞队列(BlockingQueue)可以作为同步工具类,其他类 ...

  5. 《Java并发编程的艺术》——Java中的并发工具类、线程池、Execute框架(笔记)

    文章目录 八.Java中的并发工具类 8.1 等待多线程完成的CountDownLatch 8.2 同步屏障CyclicBarrier 8.2.1 CyclicBarrier简介 8.2.2 Cycl ...

  6. 《Java并发编程的艺术》读后笔记-Java中的并发工具类(第八章)

    文章目录 <Java并发编程的艺术>读后笔记-Java中的并发工具类(第八章) 1.等待多线程完成的CountDownLatch 2.同步屏障CyclicBarrier 2.1 Cycli ...

  7. java程序设计专业介绍_简介Java编程中的Object类

    这篇文章主要介绍了简介Java编程中的Object类,是Java入门学习中的基础知识,需要的朋友可以参考下 Object 类位于 java.lang 包中,是所有 Java 类的祖先,Java 中的每 ...

  8. java中常用的工具类

    1. 常用零散工具类 1.1[DateUtil.java]日期处理的工具类 /*** 时间日期处理工具* String -> Date* Date -> String* 以及生成含有日期的 ...

  9. 【Java】Java中的常用工具类(排名前 16)

    文章目录 前言 一.org.apache.commons.io.IOUtils 二.org.apache.commons.io.FileUtils 三.org.apache.commons.lang. ...

最新文章

  1. Cannot change version of project facet Dynamic Web Module to 2.5 问题的解决方法
  2. guava之preconditions
  3. ubuntu下配置eclipse3.3
  4. 七、压缩与解压缩命令
  5. ABP入门系列(5)——展现层实现增删改查
  6. 联想笔记本重装系统教程
  7. python灰度图cv2到plt变颜色_python中plt.imshow与cv2.imshow显示颜色问题
  8. mac 删除 Windows 或 EFI Boot 启动盘的方法
  9. SSL自签署证书生成脚本
  10. OSPF的LSA类型 ——连载二网络LSA
  11. 【Proteus仿真】BME280温湿度气压传感器数据串口输出
  12. Ubuntu下给Wine设置微软雅黑字体(4步操作)
  13. uni-app实战之社区交友APP(2)全局样式引入和底部导航栏开发
  14. Mysql数据库优化
  15. 【PAT乙级】B1001-B1095刷题记录
  16. Java,设计,功能权限和数据权限,用户、角色、权限和用户组
  17. 华为 M5680t对HGU ONU配置指导
  18. 年底了,该对自己说说总结的话了
  19. centos minimal安装基础流程
  20. HTTP和HTTP的区别

热门文章

  1. 功能奇数次执行和偶数次执行时的结果不同的故障复盘
  2. 【转载】c#多线程使用webbrowser控件
  3. jggrid应用于asp.net
  4. [AT2369] [agc013_c] Ants on a Circle
  5. spring boot 完整集成jsp。(亲测可用)
  6. Linux-wget/tar/ln 函数
  7. 20145309信息安全系统设计基础第3周学习总结
  8. Erlang(起个中文名:易浪)不能错过的盛宴
  9. 关于在html中正常,在aspx中乱码的问题
  10. 微服务部署HTTP反向代理、负载均衡工具Træfɪk