当前位置: 首页 > news >正文

小架构step系列18:工具

1 概述

在写代码的时候,有很多通用的、与业务无关逻辑,这些一般写成工具类方法。这些工具类方法慢慢地被积累起来,变成了开源包,可以直接使用开源包,而不是自己再花时间来重复造这些轮子。

这些工具类的开源包比较多,公司如果没有控制的话,不同的开发人员就会选自己熟悉的开源包,甚至都拿来练练手。这样的后果就是,在一个工程内使用了五花八门的工具类包,维护代码的时候不好维护,如果要升级一些框架包或者扫描漏洞,发现很多包都需要升级或者更改,处理起来工作量比较大。

故对于公司来说,应该限定一下工具类包的种类,选定符合公司情况的工具类包。

2 工具类包

2.1 常用的工具类包

包名

说明

Apache Commons

集合操作、字符串操作、日期处理、文件处理、编码和解码、各种验证器等操作,种类是比较丰富的,需要什么类型的操作就引对应的依赖包。参考文档:https://commons.apache.org/

Spring和JDK提供的Util类

零零散散有一些(比如字符串、文件等操作),好处是不用额外引包,缺点是场景有限,比较零散也不好找。

Google Guava

有字符串操作、集合操作、对象比较、数学计算、反射等基础操作,还提供了图、缓存、并发、函数等有特色的工具方法,有对特色部分有需求的可优先选用。参考文档:https://github.com/google/guava/wiki

Hutool

小而全,覆盖大部分场景,没有依赖其它开源包,非常的轻量,也很好用,缺点是没有社区的维护,有停止维护的风险。参考文档:https://doc.hutool.cn/pages/index/

本文选Hutool来说明,该工具属于个人维护的,并没有大公司背后支持,根据公司情况选用。

2.2 Hutool常用工具类

下面只是摘录一些常用的接口,Hutool提供了很丰富的工具类方法,更多方法可参考文档说明:https://doc.hutool.cn/pages/index/

2.2.1 对象操作

cn.hutool.core.bean.BeanUtil

把对象转为Map:Map beanToMap(Object bean)

拷贝对象属性:void copyProperties(Object source, Object target, boolean ignoreCase)

获取指定属性值:Object getFieldValue(Object bean, String fieldNameOrIndex)

把map转成对象:T mapToBean(Map map, Class beanClass, boolean isIgnoreError)

把对象拷贝成指定类型对象:T toBean(Object source, Class clazz)

2.2.3 数组操作

cn.hutool.core.util.ArrayUtil

判断数组是否为空:boolean isEmpty(Object array)

给数组增加元素:Object append(Object array, T... newElements)

拷贝数组部分元素:Object copy(Object src, int srcPos, Object dest, int destPos, int length)

获取数组长度:int length(Object array)

把集合转为数组:T[] toArray(Collection collection, Class componentType)

2.2.4 集合操作

cn.hutool.core.collection.CollectionUtil

判断是否包含元素:boolean contains(Collection collection, Object value)

创建空集合:T empty(Class collectionClass)

判断集合是否为空:boolean isEmpty(Collection collection)

对集合元素进行排序:List sort(Collection collection, Comparator comparator)

数组转集合:ArrayList toList(T... values)

2.2.5 字符串操作

cn.hutool.core.util.StrUtil

判断字符串是否为空:boolean isEmpty(CharSequence str)

判断字符串是否包含子串:boolean contains(CharSequence str, CharSequence searchStr)

trim字符串:String trim(CharSequence str)

拆分字符串:String[] split(CharSequence str, CharSequence separator)

拆分并trim字符串:List splitTrim(CharSequence str, CharSequence separator)

把字符串转成驼峰型:String toCamelCase(CharSequence name)

2.2.6 日期操作

cn.hutool.core.date.DateUtil

格式化字符串:String format(Date date, String format)

把字符串解析为日期对象:DateTime parse(CharSequence dateStr, String format)

取指定日期的月:int month(Date date) 同理可以取时分秒、年月日、周等

取指定日期同月的第一天:DateTime beginOfMonth(Date date)

取指定日期同月的最后一天:DateTime endOfMonth(Date date)

取两个日期之间的差值:long between(Date beginDate, Date endDate, DateUnit unit)

判断是否闰年:boolean isLeapYear(int year)

变更日期:DateTime offset(Date date, DateField dateField, int offset)

2.2.7 文件操作

cn.hutool.core.io.FileUtil

创建文件:File newFile(String path)

拷贝文件:File copy(File src, File dest, boolean isOverride)

移动文件:void move(File src, File dest, boolean isOverride)

列出目录下的文件:File[] ls(String path)

判断是否是文件:boolean isFile(File file)

读文本文件行为List:List readLines(File file, Charset charset)

写文本文件:File writeLines(Collection list, File file, Charset charset)

获取文件大小:long size(File file)

判断是否是目录:boolean isDirectory(File file)

创建目录:File mkdir(File dir)

创建父目录:File mkParentDirs(File file)

2.2.8 HTTP操作

cn.hutool.http.HttpUtil

发GET请求: String get(String urlString, Map paramMap)

发POST请求:String post(String urlString, Map paramMap)

下载文件:long downloadFile(String url, File destFile)

cn.hutool.json.JSONUtil

格式化JSON字符串:String formatJsonStr(String jsonStr)

把JSON字符串转成对象:T toBean(String jsonString, Class beanClass)

把JSON字符串转成List:List toList(String jsonArray, Class elementType)

把对象转为JSON字符串:String toJsonStr(Object obj)

2.2.9 加解密操作

cn.hutool.crypto.SecureUtil

散列成MD5字符串:String md5(String data)

散列成SHA1字符串:String sha1(String data)

散列成SHA256字符串:String sha256(String data)

AES加密:AES aes(byte[] key)

RSA加密:RSA rsa(String privateKeyBase64, String publicKeyBase64)

对参数签名:String signParamsSha256(Map params, String... otherParams)

注:感觉这块封装得不够完善,可以当基础方法进一步封装。

3 架构一小步

1、确定工具类,如Hutool、guava。

2、积累公司自身的工具类包(涵盖外部工具类不涉及的部分或者扩展的部分)。

3、应定期调研工具类包和收集工具类包的需求,根据需要扩展。

4、规范:只允许使用的工具类包,不要随意引入新的工具类包。

http://www.xdnf.cn/news/1146295.html

相关文章:

  • 《每日AI-人工智能-编程日报》--2025年7月18日
  • 【洛谷P1417】烹调方案 题解
  • SQL注入基础尝试
  • 71 模块编程之新增一个字符设备
  • ArcGIS Pro+PS 实现地形渲染效果图
  • 上网行为管理-web认证服务
  • 【C++基础】--多态
  • ThreadLocal 在 Spring 与数据库交互中的应用笔记
  • 北京-4年功能测试2年空窗-报培训班学测开-第五十四天
  • Kubernetes Pod深度理解
  • 大模型格式
  • 外部DLL创建及使用
  • UVC for USBCamera in Android - 篇二
  • 腾讯 ChatBI 调研
  • 如何为“地方升学导向型”语校建模?Prompt 框架下的宇都宫日建工科专门学校解析(7 / 500)
  • Java HashMap高频面试题深度解析
  • 对于编码电机-520直流减速电机
  • 【AI News | 20250717】每日AI进展
  • 3.3 参数传递方式
  • 应用集成体系深度解析:从数据互通到流程协同
  • 20250718【顺着234回文链表做两题反转】Leetcodehot100之20692【直接过12明天吧】今天计划
  • Machine Learning HW2 report:语音辨识(Hongyi Lee)
  • 操作系统-处理机调度和死锁进程同步
  • 全球天气预报5天(经纬度版)免费API接口教程
  • HarmonyOS-ArkUI Web控件基础铺垫4--TCP协议- 断联-四次挥手解析
  • 70 gdb attach $pid, process 2021 is already traced by process 2019
  • postman接口测试,1个参数有好几个值的时候如何测试比较简单快速?
  • PPIO × Lemon AI:一键解锁全流程自动化开发能力
  • 【DataWhale】快乐学习大模型 | 202507,Task03笔记
  • 机械材料计算软件,快速核算重量