美文网首页
4.通过私有化构造器强化不可实例化的能力

4.通过私有化构造器强化不可实例化的能力

作者: 陈继科 | 来源:发表于2016-08-24 17:08 被阅读90次

    有些时候,你可能需要编写只含静态方法和静态域的类,例如:
    (1)java.lang.Math:组织数学计算有关函数。
    (2)java.util.Arrays:把基本类型值或数组类型上的静态方法组织起来。
    (3)java.util.Collections:把实现特定接口的对象上的方法组织起来。


    这种工具类(utility class)不希望被实例化。为了防止无构造器情况下编译器自动提供一个公有的、无参的缺省构造器,不能使用将类定为抽象类这种方法,而应该使这个类显式地包含私有构造器,这样他就不能被实例化了:

    public class Collections {
        // Suppresses default constructor, ensuring non-instantiability.
        private Collections() { 
             throw new AssertionError();
        }
        ...
    }
    

    AssertionError不是必须的,但它可以避免不小心在类内部调用构造器。加注释是为了说明这个构造器就是专门设计成不能被调用一样。
    私有化构造器使得一个类不能被子类化。因为子类需要显式或隐式地调用父类的构造器,而私有化构造器使得子类没有可访问的父类构造器可调用了。

    相关文章

      网友评论

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

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