Java:Static Class?
我有一个充满实用程序函数的类。实例化它的实例没有语义意义,但我仍然想调用它的方法。处理这个问题的最佳方法是什么?静态类?抽象?
我有一个充满实用程序函数的类。实例化它的实例没有语义意义,但我仍然想调用它的方法。处理这个问题的最佳方法是什么?静态类?抽象?
标记为 final 的类上的私有构造函数和静态方法。
根据伟大的著作“Effective Java”:
项目 4:使用私有构造函数强制实施不稳定性
- 试图通过使类抽象来强制非实例性是行不通的。
- 仅当类不包含显式构造函数时,才会生成默认构造函数,因此可以通过包含私有构造函数使类不可验证:
// Noninstantiable utility class
public class UtilityClass
{
// Suppress default constructor for noninstantiability
private UtilityClass() {
throw new AssertionError();
}
}
由于显式构造函数是私有的,因此在类外部无法访问它。AssertionError不是严格要求的,但它提供了保险,以防从类中意外调用构造函数。它保证该类在任何情况下都不会被实例化。这个成语有点违反直觉,因为构造函数是明确提供的,因此无法调用它。因此,如上所述,最好包括注释。
作为副作用,此成语还可以防止类被子类化。所有构造函数都必须显式或隐式调用超类构造函数,并且子类没有可访问的超类构造函数可调用。