《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" 转载请保留原文链接及作者。