如何编写一个 Java 工具类?

JAVA herman 83浏览

在知乎上,以如何 XXX 开头的话题有很多。今天我也以如何编写一个 Java 工具类为话题,给大家规范一下工具类如何编写?

说实话,这个话题连《阿里巴巴Java开发手册》上都没有,这说明工具类确实简单,简单的不能再简单了,所以阿里巴巴Java开发手册都懒得写。但是并不能代表非阿里巴巴的员工都能高效的写出工具类。

最近我在做 code review 时,发现了一些开发人员在编写工具类时的小问题,所以在这里我简单的讲一下我的个人理解。不喜欢的可以敬请的喷!

结合上一篇文章《如何写出健壮的 Java 代码!》,本文来规范一下工具类的编写!

首先说明一下,这个工具类的规范不是我定义的,而是我参考众多知名开源框架发现的。

先说第一种情况,如果工具类中的方法全部时静态方法,那么可以将工具类作为一个 abstract 抽象类。Spring 框架中存在大量的这样的使用。

然后,如果工具类中有异常,请抛出,不要自己去 try-catch。更不要 try 了之后 e.printStackTrace() 。

还有就是工具类中要不要打印日志问题,尽量不要打印,像 log4j 这样的一些第三方日志框架也不要用。降低于第三方类库的依赖。

还有一情况是,工具类中的方法非 static 的。那你可以将工具类定义为 final class,考虑到工具类应该不能被继承。在私有化它的构造函数,提供一个单例。

工具类的命名应该用 Util 结尾,例如 LogUtil。

像下面这种工具类,就千万要注意了。

Java 工具类规范

至于工具类中的方法应该设计为静态的还是非静态的,这个没有统一的标准。各有各的好,参加大多数开源框架,static 的多一些。

工具类的设计,推荐大家多看看 GuavaApache Commons

像大名鼎鼎的 Hutool,它提到了工具类的 6 大设计思想。方法优先于对象、自动识别优于用户定义、便捷性与灵活性并存、适配与兼容、可选依赖原则、无侵入原则。

Hutool 中的工具类,既没有采用抽象类 abstract class 有没有采用 final class。所以我更喜欢 Spring、Guava、Apache Commons等框架的源码。

业余草公众号

最后,欢迎关注我的个人微信公众号:业余草(yyucao)!可加QQ1群:135430763(2000人群已满),QQ2群:454796847,QQ3群:187424846。QQ群进群密码:xttblog,想加微信群的朋友,可以微信搜索:xmtxtt,备注:“xttblog”,添加助理微信拉你进群。备注错误不会同意好友申请。再次感谢您的关注!后续有精彩内容会第一时间发给您!原创文章投稿请发送至532009913@qq.com邮箱。商务合作可添加助理微信进行沟通!

本文原文出处:业余草: » 如何编写一个 Java 工具类?