高效Java第四条通过私有构造函数强化不可实例化的能力

问题的引出

工具类:只包含静态方法和静态域的类
java.lang.Mathjava.util.Arrays,把基本类型或数组类型上的相关方法组织起来。
java.util.Collections把实现特定接口的对象上的静态方法组织起来。
利用这种类把final类上的方法组织起来,以取代扩展该类的做法。

这样的工具类不希望被实例化,实例化对它们没有任何意义。

不要将工具类抽象化

企图通过将类做成抽象类来强制该类不可被实例化,这是行不通的。
该类可以被子类化,并且该子类可以被实例化。这样会误导用户,以为这种类是专门为了继承而设计的。

私有工具类的构造函数

高效Java第四条通过私有构造函数强化不可实例化的能力_第1张图片

AssertionError可以避免不小心在类的内部调用构造函数。它可以保证该类在任何情况下都不会被实例化。
这种习惯作用有点违背直觉,好像构造函数是专门设计成不能被调用一样。因此,明智的做法是在代码中增加一条注释。

使工具类的构造函数私有化的缺点

使工具类不能被子类化。

你可能感兴趣的:(高效Java第四条通过私有构造函数强化不可实例化的能力)