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

Posted 十木禾

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Effective Java -- 通过私有构造器强化不可实例化的能力相关的知识,希望对你有一定的参考价值。

本文是 《Effective Java Second Edition》第4条的读书笔记,文中如有错误或表述不当,非常欢迎能批评指正,本人不胜感激!


在绝大多数的项目中,我们都会用到一些工具类来供我们调用。如果获取六位数的验证码,或者进行对字符串的一些加密等等。

对于上面的这些工具类(Utils)我们不希望他们被实例化,因为实例化对它没有任何的意义。

但是在我们不添加构造函数的时候,编译器会自动的去添加一个公有地,无参的默认构造函数(default constructior)。

那么我们将这个类做成抽象类怎么样?
我们知道抽象类的作用就是专门被用来的继承了,一方面被继承了,其子类就会被实例化,另一方面,我们的工具类又不是用来继承的,这样反而会误导用户。

所以,这时候我们只要给这个类提供一个私有的构造函数就可以了。

/**
 * 字符串加密的工具类.
 *
 * @author 未绪~.
 * @date 2017/11/1-20:33.
 */
public class Md5Utils 

    //提供一个私有构造函数来防止该类被实例化

    private Md5Utils()
        //防止不小心在类的内部调用,或者使用反射机制调用
        throw new AssertionError();
    

我们需要给该构造函数加上一个注释,来表明其目的是为了防止被实例化。
我们可以在该私有构造函数中抛出一个异常,以防止我们在类的内部不小心调用。

这样的话该类既不能被实例化,也不能被继承了。

[注]. 子类的构造函数必须显示或者隐式的调用父类的构造函数,如果父类为私有的,则子类就没有权限访问了。


以上 2017/11/01-20:37 于福州大学.

以上是关于Effective Java -- 通过私有构造器强化不可实例化的能力的主要内容,如果未能解决你的问题,请参考以下文章

《Effective Java 中文版 第2版》学习笔记 第4条:通过私有构造器强化不可实例化的能力

Effective Java--读书笔记

Effective Java目录

Effective Java总结的78条

Java:Effective java学习笔记之 用私有构造器或者枚举类型强化SIngleton属性

Effective Java 第三版——4. 使用私有构造方法执行非实例化