本文是 《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 于福州大学.