通过私有构造器强化不可实例化的能力

通过私有构造器强化不可实例化的能力

概述

一些工具类可能不希望被实例化,因为实例化对它没有任何含义。诸如Java.lang.Math这种类只含有静态方法和静态域。

方法

企图将这些类实现成抽象类是行不通的,因为子类化之后仍然可以被实例化。可能会误导用户,以为这是为继承而设计的。

但不包含显式的构造器又可能导致编译器生产缺省的构造器。

因此,我们可以让让这个类只包含私有构造函数,同时包含AssertionError,避免内部实例化:

1
2
3
4
5
public class UtilityClass {
private UtilityClass() {
throw new AssertionError();
}
}