美文网首页
第四条:通过私有构造器强化不可实例化的能力

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

作者: Js_Gavin | 来源:发表于2020-11-30 20:38 被阅读0次

    有时候可能需要编写只包含静态方法和静态域的类,类似java.lang.Math和 java.util.Arrays的方式,把基本类型的值,或者数组类型上的相关方法组织起来,类似java.util.Collections的方式,把实现特定接口的对象上的方法,包括工厂方法,组织起来。

    这样的工具类不希望被实例化,因为没有任何意义,但是在缺少显式构造器的情况下,编译器会自动提供一个公有的,无参的隐式构造器。

    企图将类定义为抽象类来强制该类不可被实例化也是行不通的,该类还是可以被子类化,并且子类也是可以被实例化的。然后,有一个简单的方式可以确保类不被实例化,由于只有当类不包含显式的构造器,编译器才会自动生成隐式无参构造器,所以只需要在类中保留一个私有的构造器,就能保证不被实例化。

    public class UtilsClass{
        private UtilsClass{
           throw new AssertionError();
        }
    }
    

    由于显式的构造器是私有的,所以不可能在该类的外部访问它,AssertionError()不是必须的,但是可以避免不小心在内部调用构造器,它可以保证在任何情况下都不能实例化该类。

    这种习惯也有副作用,它使得一个类不能被子类化,所有的构造器都必须显式或者引式的调用超类构造器,在这种情况下,子类就没有可访问的超类构造器可调用了。

    相关文章

      网友评论

          本文标题:第四条:通过私有构造器强化不可实例化的能力

          本文链接:https://www.haomeiwen.com/subject/byfkwktx.html