今天看第四条:使用私有构造器强化不可实例化的能力。
这一节中,作者讲了那些只有静态方法和静态域的类。这样的类一般是一些工具类,我平时也经常会用到,但是作者接下来的说的东西我却从来都没有考虑过。作者为了把这些类做成不可实例化的,特意写了私有的构造器,但是这样同时会导致这些类无法被继承。
// Noninstantiable utility class
public class UtilityClass {
// Suppress default constructor for noninstantiability
private UtilityClass() {
throw new AssertionError();
}
... // Remainder omitted
}
这种用法有点反直觉,通过给出一个私有的构造器,避免编译器默认提供的公共无参的构造器。不过这样做的意义到底有多大呢?为了API上少一个没有意义的方法?这一点或许还需要我进一步的思考。
网友评论