Item 4: Enforce noninstantiability with a private constructor.

令构造函数私有化来实现不可变类

通常有一些类不是为产生实例而设计的,这些类被称作不可变类(immutable class)。

首先,不建议使用abstract让类成为抽象类,虽然这达成了目的,但是可能会给人一种这种类是被继承而设计的,同时,它的子类是可以实例化的。

推荐构造函数私有化来防止类被实例化,同时,由于子类必须要调用父类的构造函数,其私有化的构造函数也保证了不会产生子类,这可能也同时是一个副作用。

除此之外,因为显式构造函数是私有的,所以在类之外是不可访问的。建议在构造函数中抛出AssertionError,以防构造函数意外地被调用。它保证类在任何情况下都不会被实例化。

// Noninstantiable utility class
public class UtilityClass {
    // Suppress default constructor for noninstantiability
    private UtilityClass() {
        throw new AssertionError();
    } ... // Remainder omitted
}
上一篇:从C#到Objective-C的构造函数代码


下一篇:C#-在构造函数或析构函数中调用的虚拟函数的行为