Dav*_*les 160
标记为final的类上的私有构造函数和静态方法.
Dav*_*les 93
根据伟大的书"Effective Java":
第4项:使用私有构造函数强制实现非实例化
- 尝试通过使类抽象来强制执行非实例化不起作用.
- 仅当类不包含显式构造函数时,才会生成默认构造函数,因此可以通过包含私有构造函数使类不可实现:
// Noninstantiable utility class
public class UtilityClass
{
// Suppress default constructor for noninstantiability
private UtilityClass() {
throw new AssertionError();
}
}
Run Code Online (Sandbox Code Playgroud)
因为显式构造函数是私有的,所以它在类之外是不可访问的.AssertionError不是严格要求的,但是如果在类中意外调用构造函数,它会提供保险.它保证在任何情况下都不会实例化该类.这个成语有点违反直觉,因为构造函数是明确提供的,因此无法调用它.因此,如上所示,包括评论是明智的.
作为副作用,这个习惯用法也可以防止类被子类化.所有构造函数必须显式或隐式地调用超类构造函数,并且子类将不具有可调用的可访问超类构造函数.
cro*_*wne 21
听起来你有一个类似于java.lang.Math的实用程序类.
这种方法有最终类,包含私有构造函数和静态方法.
但要注意这对可测试性的作用,我建议阅读本文
静态方法是可测性的死亡
只是为了向上游游泳,静态成员和班级不参与OO,因此是邪恶的.不,不是邪恶,但严重的是,我会推荐一个带有单身模式的常规课程.这样,如果您需要在任何情况下覆盖行为,这不是一个重大的重组.OO是你的朋友:-)
我的$ .02
| 归档时间: |
|
| 查看次数: |
111855 次 |
| 最近记录: |