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

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

作者: 明月_48cd | 来源:发表于2017-04-27 12:33 被阅读0次

有些时候,你可能需要编写只含静态方法和静态域的类,例如:

(1)java.lang.Math:组织数学计算有关函数。

(2)java.util.Arrays:把基本类型值或数组类型上的静态方法组织起来。

(3)java.util.Collections:把实现特定接口的对象上的方法组织起来。

最后,还可以利用这种类把final类上的方法组织起来,以取代扩展该类的做法。

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

public class Collections{

// Suppresses default constructor, ensuring non-instantiability.

private Collections(){

thrownewAssertionError();

}

...

}

AssertionError不是必须的,但它可以避免不小心在类内部调用构造器。加注释是为了说明这个构造器就是专门设计成不能被调用一样。

副作用:私有化构造器使得一个类不能被子类化。因为子类需要显式或隐式地调用父类的构造器,而私有化构造器使得子类没有可访问的父类构造器可调用了。

相关文章

网友评论

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

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