`

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

阅读更多

你可能需要编写只包含静态方法和静态域的类。
这样的工具类不希望被实例化,实例化对他没有任何意义。

(企图通过将类做成抽象类来强制该类不可被实例化,这是行不通的)

工具类(util)就是一类不该被实例化类的代表。它们只是提供一些实用功能,实例化之是毫无意义的。

demo:

 

  1. // Noninstantiable utility class  
  2. public class UtilityClass {  
  3.     // Suppress default constructor for noninstantiability  
  4.     private UtilityClass() {  
  5.         throw new AssertionError();  
  6.     }  
  7. }  

 

 

这种惯用法的副作用:它使得一个类不能被子类化。所有的构造器都必须显示或隐式的调用超类构造器。在这种情形下子类就没有可访问的超类构造器可调用了。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics