问题的引出
工具类:只包含静态方法和静态域的类
java.lang.Math
或java.util.Arrays
,把基本类型或数组类型上的相关方法组织起来。
java.util.Collections
把实现特定接口的对象上的静态方法组织起来。
利用这种类把final
类上的方法组织起来,以取代扩展该类的做法。
这样的工具类不希望被实例化,实例化对它们没有任何意义。
不要将工具类抽象化
企图通过将类做成抽象类来强制该类不可被实例化,这是行不通的。
该类可以被子类化,并且该子类可以被实例化。这样会误导用户,以为这种类是专门为了继承而设计的。
私有工具类的构造函数
AssertionError
可以避免不小心在类的内部调用构造函数。它可以保证该类在任何情况下都不会被实例化。这种习惯作用有点违背直觉,好像构造函数是专门设计成不能被调用一样。因此,明智的做法是在代码中增加一条注释。
使工具类的构造函数私有化的缺点
使工具类不能被子类化。