令构造函数私有化来实现不可变类
通常有一些类不是为产生实例而设计的,这些类被称作不可变类(immutable class)。
首先,不建议使用abstract让类成为抽象类,虽然这达成了目的,但是可能会给人一种这种类是被继承而设计的,同时,它的子类是可以实例化的。
推荐构造函数私有化来防止类被实例化,同时,由于子类必须要调用父类的构造函数,其私有化的构造函数也保证了不会产生子类,这可能也同时是一个副作用。
除此之外,因为显式构造函数是私有的,所以在类之外是不可访问的。建议在构造函数中抛出AssertionError,以防构造函数意外地被调用。它保证类在任何情况下都不会被实例化。
// Noninstantiable utility class
public class UtilityClass {
// Suppress default constructor for noninstantiability
private UtilityClass() {
throw new AssertionError();
} ... // Remainder omitted
}