第4条:通过私有构造器来强化不可实例化能力

  像有些类里面可能只包含静态方法、属性和静态域的类时,而在缺少显示的构造器的时候,编译器会提供一个无参的缺省构造器,由于实例化它们并没有任何意义,所以显然没有必要,这时候我们可以提供一个私有的构造器,这样就不被实例化了,当然,我们最后在构造器中抛出异常来进行说明下,或者加条注释。

public class UtilityClass{
       private UtilityClass(){
                 throw new AssertionError("UtilityClass  cant not have instance");
       }
}

  当然,有人企图通过将类做成抽象类来强制该类不能不实例化,但是我们不要忽略该类可以被子类化,然后子类在进行实例化,这就很容易误导用户了。因此这种方法的缺点也就是不能被继承。

 

posted @ 2017-04-11 17:09  哀&RT  阅读(202)  评论(0编辑  收藏  举报