《Effective Java》笔记04:通过私有构造器强化不可实例化的能力

不可实例化是指只包含静态方法和静态域的类

比如 BitmapUtil 等各种 Utils,它们包含各种静态方法,但是实际上我们不会也不需要去实例化它!

静态域(static-field) 比如:public static Object obj提供一个私有构造器,并在里面抛出异常即可

public class Util{
    private Util{
        // Suppress default constructor for noninstantiability
        throw new AssertionError();
    }
}

这种用法也有副作用,它使得一个类不能被子类化

相信都会感觉这多此一举,谁没事去实例化工具类啊,直到在优秀的库中看到这写法,比如 RxJava 中的 Subscriptions 类:

public final class Subscriptions {
    private Subscriptions() {
        throw new IllegalStateException("No instances!");
    }
    //...
}

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 bin07280@qq.com

文章标题:《Effective Java》笔记04:通过私有构造器强化不可实例化的能力

文章字数:174

本文作者:Bin

发布时间:2016-05-06, 17:00:28

最后更新:2019-08-06, 00:42:37

原始链接:http://coolview.github.io/2016/05/06/Effective-Java/%E3%80%8AEffective%20Java%E3%80%8B%E7%AC%94%E8%AE%B004%EF%BC%9A%E9%80%9A%E8%BF%87%E7%A7%81%E6%9C%89%E6%9E%84%E9%80%A0%E5%99%A8%E5%BC%BA%E5%8C%96%E4%B8%8D%E5%8F%AF%E5%AE%9E%E4%BE%8B%E5%8C%96%E7%9A%84%E8%83%BD%E5%8A%9B/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录