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

从Arrays源码学习定义工具类

背景

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

如何定义好工具类

  • 业务无关性

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

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

  • 私有化构造方法 

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

  • 内部方法不要暴露

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

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

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

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

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

  • 善用方法重载

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

  • 方法注释要详细

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


http://www.kler.cn/a/507146.html

相关文章:

  • Conda的一些常用命令
  • 【Block总结】掩码窗口自注意力 (M-WSA)
  • Vulnhub DC-8靶机攻击实战(一)
  • 频域增强通道注意力机制EFCAM模型详解及代码复现
  • Android SystemUI——车载CarSystemUI加载(八)
  • 港科夜闻 | 香港科大与微软亚洲研究院签署战略合作备忘录,推动医学健康教育及科研协作...
  • sqlalchemy The transaction is active - has not been committed or rolled back.
  • leetcode hot100(2)
  • 【CSS】:nth-child和:nth-of-type
  • 【Elasticsearch】全文搜索与相关性排序
  • SCSSA-BiLSTM基于改进麻雀搜索算法优化双向长短期记忆网络多特征分类预测Matlab实现
  • UI自动化测试框架之PO模式+数据驱动
  • 如何选择合适的服务器?服务器租赁市场趋势分析
  • 【遥感目标检测】【数据集】DOTA:用于航空图像中目标检测的大规模数据集
  • 【深度学习】Pytorch:CUDA 模型训练
  • .net core 中使用AsyncLocal传递变量
  • 【实践功能记录9】使用pnpm打补丁
  • VD:生成a2l文件
  • Lora理解QLoRA
  • iOS - Objective-C 底层中的内存屏障
  • 服务器下发任务镭速利用变量实现高效的大文件传输效率
  • Python人工智能在气象中的应用,包括:天气预测、气候模拟、降雨量和降水预测、气象数据分析、气象预警系统
  • 【Element】一键重置表单resetFields
  • 【开源分享】nlohmann C++ JSON解析库
  • 学习 Git 的工作原理,而不仅仅是命令
  • 《零基础Go语言算法实战》【题目 2-28】读写不安全问题