先来几个例子

  • JDK自带工具类
Arrays.asList();
Objects.equals();
Collections.sort();
  • Spring框架工具类
StringUtils.isEmpty();
CollectionUtils.isEmpty()
FileCopyUtils.copy();
  • Hutool工具类
StrUtil.isEmpty();
CollectionUtil.isEmpty();
FileUtil.copy();

我们发现各组例子之间的命名方式均不一样,总结一下分为三种:

1、JDK主要以操作对象的复数形式命名

2、Spring框架的工具类以对象或用途 + Util复数方式命名

3、Hutool框架的工具类则以对象或用途 + Util单数方式命名

OK,看完上面的再看下我们项目中的工具类命名方式

 StringUtil.isEmpty();
StringUtils.isEmpty();
StringKit.isEmpty();
StringHelper.isEmpty();
StringTool.isEmpty();
StringTools.isEmpty();

可以看到一个简单的String工具类就可以有这么多命名方式,可谓是集百家之长,相当丰富。

几种命名方式的比较

JDK为代表的对象复数形式

优点

简单明了,熟悉的人这么用其实蛮爽的。

缺点

容易与其他以s结尾的单词让人对类的作用产生误解,例如将News、Goods等pojo类跟Objects工具类放一起。是不是第一感觉它们是同一用途,实则不然。

Spring框架为代表的对象Util复数形式

优点

能从类名上对类的用途进行划分,使用者不容易产生误解。

缺点

类命名一般为单数,复数命名形式会显得整体命名方式不一致。

Hutool框架为代表的对象Util单数形式

优点

能从类名上对类的用途进行划分,使用者不容易产生误解,且整体命名方式容易与项目其他类保持一致。

缺点

这样就OK了,再较真就没法玩了。

项目中的命名方式

此处不对项目中的Kit、Tool等命名做过多讨论,主要还是对主流的几种命名方式进行分析。

到底如何命名 ?

对于纯粹的工具类来说,行业中普遍还是以Util或Utils命名方式居多,其他命名方式当然也可以使用,包括上面所列举的项目中的几种命名方式,只是说大家提到Util或Utils第一反应都知道是工具类,其他的命名方式或许需要反应个几秒钟。

但是这里需要说一下Util与Helper的区别,也仅限自己的理解。

在软件架构中有个软件重用的概念,分为水平式重用与垂直式重用。

水平式重用:是指可以在不同应用领域中使用的软件元素,简单理解就是业务无关性,可以在任意业务场景中使用

垂直式重用:是指在一类或具有较多公共性的应用领域之间进行软部件重用,简单理解就是可以在特定的业务领域或业务场景中使用

那么Util类就属于上面所说的水平式重用,Util类更多是对JDK提供的类进行封装,或者是某一技术框架自己提供的对框架内部其他类的使用封装,但是这类一般都具有业务、领域的无关性。在任何业务、领域下均可使用。所以既然是工具类一定保证其水平式重用这一特性。

Helper翻译过来助手/帮手,从字面意思来看,这样的类是作为辅助类来使用的,那么问题来了,辅助的对象是谁 ?那么当然是对别的类的辅助,这里就有个范围,哪些类可以被辅助,理论上所有类或对象如果需要都可以被辅助,但实际中更多是为了简化某一场景下相关类使用的复杂度,而提供了便捷的访问接口,形成Helper类,而这个场景一般具有业务或领域特征,所以更多体现的使用垂直式重用

总结

我个人来说目前习惯使用Util单数形式命名,项目中的其他类均以单数形式命名,如:UserController、UserVo这样的,突然出现一个复数形式的类会感觉有点突兀。

没什么特殊要求或个人癖好的情况下,还是以Util或Utils大众最容易理解的方式进行命名,你说我非要用Tool命名咋的了,这么干也没问题,关键在于公司或团队有一套自己的标准就行,我是一个有代码洁癖的人,团队中的规范标准我都会进行严格统一,前期看似需要花费不少时间,但当内部大家认知能够达成一致时,越往后团队中大家工作的默契度越高这样能最大程度减少沟通成本,减小后期的维护成本。

如果能满足以上需求,怎么命名真的都OK

Java中的工具类究竟如何命名?的更多相关文章

  1. Java中的工具类和新特性

    1:Collections集合框架工具类: /* 集合框架的工具类. Collections:集合框架的工具类.里面定义的都是静态方法. Collections和Collection有什么差别? Co ...

  2. 在Java中Arrays工具类实现功能的六种方法

    使用Arrays工具类,要先导入包即:import.java.util.Arrays 以下是实现六种功能的方法: 1.比较两个数组值是否相等: 结果为true.false.(布尔型不能比较) int ...

  3. 巧用Java中Calendar工具类

    Java的JDK中提供了一系列好用的util工具类.Calendar就是java.util中用于处理日期的工具类.且该工具类易学易用实用. 工具类Calendar是抽象类. PS:为什么把Calend ...

  4. java高并发系列 - 第22天:java中底层工具类Unsafe,高手必须要了解

    这是java高并发系列第22篇文章,文章基于jdk1.8环境. 本文主要内容 基本介绍. 通过反射获取Unsafe实例 Unsafe中的CAS操作 Unsafe中原子操作相关方法介绍 Unsafe中线 ...

  5. Java中Arrays工具类

    以下是实现六种功能的方法: 1.比较两个数组值是否相等: 结果为true.false.(布尔型不能比较) int []a={10,20,30}; int []b={10,20,30}; int []c ...

  6. java中常用工具类

    目录 一. org.apache.commons.io.IOUtils 二. org.apache.commons.io.FileUtils 三. org.apache.commons.lang.St ...

  7. HttpTool.java(在java tool util工具类中已存在) 暂保留

    HttpTool.java 该类为java源生态的http 请求工具,不依赖第三方jar包 ,即插即用. package kingtool; import java.io.BufferedReader ...

  8. 简单了解Spring中常用工具类_java - JAVA

    文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习 文件资源操作 Spring 定义了一个 org.springframework.core.io.Resource 接口, ...

  9. java中的File类

    File类 java中的File类其实和文件并没有多大关系,它更像一个对文件路径描述的类.它即可以代表某个路径下的特定文件,也可以用来表示该路径的下的所有文件,所以我们不要被它的表象所迷惑.对文件的真 ...

随机推荐

  1. Spring Boot 2.X(十一):全局异常处理

    前言 在 Java Web 系统开发中,不管是 Controller 层.Service 层还是 Dao 层,都有可能抛出异常.如果在每个方法中加上各种 try catch 的异常处理代码,那样会使代 ...

  2. Netty源码分析之ChannelPipeline(一)—ChannelPipeline的构造与初始化

    Netty中ChannelPipeline实际上类似与一条数据管道,负责传递Channel中读取的消息,它本质上是基于责任链模式的设计与实现,无论是IO事件的拦截器,还是用户自定义的ChannelHa ...

  3. 前端路由hash、history原理及简单的实践下

    阅读目录 一:什么是路由?前端有哪些路由?他们有哪些特性? 二:如何实现简单的hash路由? 三:如何实现简单的history路由? 四:hash和history路由一起实现 回到顶部 一:什么是路由 ...

  4. 冷知识: 不会出现OutOfMemoryError的内存区域

    程序计数器(PC) 因为程序计数器只是记录当前线程正在执行的那条字节码指令的地址,即使出现死循环都不会内存溢出

  5. 如何在Idea中编译构建Spring Framework 5.x

    如何在Idea中编译构建Spring Framework 5.x 安装配置Gradle(略) 下载源码:git clone https://github.com/spring-projects/spr ...

  6. .NET Core 3.0 中间件 Middleware

    中间件官网文档解释:中间件是一种装配到应用管道以处理请求和响应的软件 每个中间件: 选择是否将请求传递到管道中的下一个组件. 可在管道中的下一个组件前后执行工作. 使用 IApplicationBui ...

  7. (八十六)c#Winform自定义控件-表格优化

    出处:http://www.hzhcontrols.com/原文:http://www.hzhcontrols.com/blog-149.html本文版权归www.hzhcontrols.com所有欢 ...

  8. H5 + WebGL 实现的楼宇自控 3D 可视化监控

    前言 智慧楼宇和人们的生活息息相关,楼宇智能化程度的提高,会极大程度的改善人们的生活品质,在当前工业互联网大背景下受到很大关注.目前智慧楼宇可视化监控的主要优点包括: 智慧化 -- 智慧楼宇是一个生态 ...

  9. MySQL批量插入的分析以及注意事项

    目录 1.背景 2.两种方式对比 2.1.一次插入一条数据 2.2.一次插入多条数据 3.拓展一下 4.Other 1.背景 我们在工作中基本都会碰到批量插入数据到DB的情况,这个时候我们就需要根据不 ...

  10. NOIP模拟34

    考试的时候被T2卡了一年....考虑了一下正解的式子,然后没去给左边分解因数,去给后面乘倍数...理论复杂度O(n^2),实际好像卡不掉的样子.但是由于我智障的打了一棵主席树,他M了.... 预计得分 ...