这是我参与8月更文挑战的第14天,活动详情查看:8月更文挑战
前言
Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,让Java语言也可以“甜甜的”
在平时开发中,我们一定少不了维护util
包的时候,这里面存放的多数是一些复用性强的工具代码;而Hutool的出现,是项目中util
包友好的替代,它节省了开发人员对项目中公用类和公用工具方法的封装时间,使开发专注于业务,同时可以最大限度的避免封装不完善带来的bug
作为一个20k+ star 的工具库项目,Hutool代码的身影无处不在,在GitHub上被超过38k+的项目所依赖,相信各大企业的项目中也少不了Hutool的身影
符上链接:Hutool — 🍬A set of tools that keep Java sweet.
小彩蛋:
写这一期的原因,来自我的同事,当时我们有一个需求是:在进入算法前,对身份证的格式进行校验,校验不通过的个人信息要进一步做处理
这位仁兄手写了一个身份证校验工具,在进行各种测试的时候被我看到了
我:“你为什么不用Hutool里面的校验工具,像身份证手机号这些校验工具别人都写好了,经过各种项目验证过了?”
对方:“Hutool???(皱眉、疑惑、一丝丝震惊、一丝丝我是不是白干了的担心)???”
我:当面撸了一个例子
对方:“(国骂)!白干了一天!”
1. 依赖引入
在写本文时,官网的最新版为5.7.8
对于Hutool工具包,我们可以全量引入:
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.7.8</version>
</dependency>
也可以根据Hutool的模块来按需引入:
2. 用例
讲一下在工作中我用到Hutool 的一些场景,进一步讲解一下Hutool工具包的应用范围
2.1 场景一:Http请求工具类
项目中有个小需求,目的是在一次业务操作的方法完成后,通过调用HTTP接口的方式去通知一下第三方的业务系统
于是我使用自定义注解和AOP实现了一个异步通知的方法,再利用Hutool的Http模块实现了接口的调用:
String postResult;
try {
postResult = HttpUtil.post(url, body);
} catch (Exception e) {
log.info(推送失败,原因);
return;
}
其实,从Hutool源码封装的API来看,只要稍微懂一点原理,就能无缝上手,稍微有点疑惑只要翻看一下源码就能马上明白该怎么用:
2.2 场景二:equal判断
我们写代码的时候经常遇到要判断两个对象是否相等的情况,而对象自带的equal()
方法是有可能抛出令我们最讨厌的NullPointerException
的,就像下面这种情况:
Student a = null;
Student b = new Student();
a.equals(b);
此时你要是有安装SonarLint
的话,会有这么一个提醒:
此时,我们可以用Hutool的ObjectUtil 工具里封装的equal()
方法来替代:
但这里需要注意的是,两个对象为null的时候返回的结果也是True,在使用封装的工具类时,要特别注意的是返回值的形式,不能用习惯来判断它是怎样返回的,否则很可能导致程序运行的结果和你的预期有出入
2.3场景三:布隆过滤器实现
Bloom filter 是由 Howard Bloom 在 1970 年提出的二进制向量数据结构,它具有很好的空间和时间效率,被用来检测一个元素是不是集合中的一个成员。
- 如果检测结果为是,该元素不一定在集合中;但如果检测结果为否,该元素一定不在集合中。
- 因此Bloom filter具有100%的召回率。这样每个检测请求返回有“在集合内(可能错误)”和“不在集合内(绝对不在集合内)”两种情况。
说到布隆过滤器,有很多的实现可以用,比如guava的布隆过滤器实现,Redis也有布隆过滤器功能的版本,但是Hutool胜在API的简单易用啊,可以看作是一个简易的实现,能满足我们的需求即可
// 初始化
BitMapBloomFilter filter = new BitMapBloomFilter(10);
filter.add("123");
filter.add("abc");
filter.add("ddd");
// 查找
System.out.println(filter.contains("abc"));
//输出
true
2.4 场景四:常用的格式校验
当接口涉及到个人信息时,我们常常要对个人信息的手机号、身份证等信息进行一个格式验证,寻常的办法肯定是找一个正则表达式,再转换成Java代码写到代码逻辑中
但其实Hutool早就封装好了,我们只需要一个简单的调用:
boolean result = Validator.isCitizenId("123");
System.out.println(result);
//输出
false
可以看到是非常的齐全了
总结
其实Hutool工具包的上手真的和容易,只需要看一下官方文档和示例,哪怕你是第一次用也能很好的使用Hutool完成一些比较复杂的功能
但是使用的时候也要注意以下几点:
- 使用工具类的时候一定要注意返回值,不要让“经验注意”导致程序出现与预期不符的结果
- 工具类经过众多项目、开源贡献者的验证,可以信任,但是必要的测试不可少
- 可以用但不代表可以滥用,当使用某一个技术进行实现时,最好与同类技术进行比较,避免出现问题的同时可以扩充自己的知识库
- 据我所知是有公司明令禁止使用这个工具库,可能就是一些粗心的程序yuan踩了以上的三点[狗头]