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条:通过私有构造器强化不可实例化的能力