欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > IT业 > 从Arrays源码学习定义工具类

从Arrays源码学习定义工具类

2025/9/20 17:32:03 来源:https://blog.csdn.net/weixin_40709965/article/details/145191799  浏览:    关键词:从Arrays源码学习定义工具类

背景

        在日常编码中,一个比较好的实践是:我们把一些业务无关的、可复用的一些通用逻辑,封装成工具类、甚至jar包。这样一方面方便通用代码抽取、代码复用,同时也隔离经常变动的业务代码和不变的通用代码。那如何定义好一个工具类呢?接下来我们结合JDK中的Arrays工具类源码来学习。

如何定义好工具类

  • 业务无关性

            工具类最大的便利就是复用,而复用势必会带来与调用者的耦合。为了尽量减少工具类和调用者的耦合,就要保持工具类的业务无关性、单一职责和精简。       

           假如工具类、为了兼容上游A/B/C/D不同调用者,而在类本身引入大量if-else等判断分支,这虽然满足了复用,但极大增加了代码耦合,反而得不偿失。

  • 私有化构造方法 

            工具类由于其业务无关性和无状态,所以其行为直接和类相关,直接通过类名来调用静态方法。为了避免类被初始化,直接私有化构造方法,仅允许通过类名来调用方法。如Arrays的源码,通过私有话构造方法,强化通过类名调用。

  • 内部方法不要暴露

           基于迪米特法则(最少知道原则),我们应该尽量小的暴露类方法。

           只有需要提供给调用者使用的,才定义为public权限。一些不需要暴露给调用者的(如内部方法),要定义为private权限。

            这条原则在非工具类中也适用,但是工具类毕竟复用的地方较多,暴露不必要的方法,反而给调用者造成歧义和负担

           如下图Arrays的源码中,sort()方法,是需要暴露给外部的,所以定义为public,并且因为通过类名直接调用,同时也是static静态方法。而rangeCheck是供public方法调用的内部方法,因此就定义为private,无需对外暴露。

           同时,也可根据rangeCheck方法,学到使用卫语句,快速失败和根据场景,返回不同的自定义异常

  • 善用方法重载

           对于实现的功能相同,只是输入参数不同的情况,建议使用重载方法。因为工具类,主要是供外部调用的,对于重载的方法,调用者可以很方便的知道,实现的功能是下相同的,只是入参不同。如Arrays中的sort重载方法,这样你一看就知道它们实现的功能是相同的,可以放心选择调用。

  • 方法注释要详细

           工具类不同于业务代码,由于其复用的普遍性,需要具有较强的可读性。因此,工具类的对外的常量或方法,一定要做好方法注释。让调用者无需查看方法逻辑,迅速就能知道,方法的作用、入参和返回值的含义,进而提高使用工具类的效率。例如Arrays中,对方法进行了详细的注释,以便调用者快速了解此方法。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词