静态变量的初始化,你是否真的需要lazy?
看老赵几天前提到double-check,昨天又提到属性的lazy加载,想起记这么一点:在实现单例的时候,你是否真的需要用double-check之类的技巧来实现lazy创建实例?
使用单例模式但又想让它lazy创建实例,理由通常是“实例的创建可能伴随一些复杂的初始化计算,或者需要持有一些外部资源之类;如果程序中并没有使用到那个实例,那么付出的代码就白费了”。
但很多时候上述理由是个伪命题:不使用的类根本就不会被初始化。既然没有初始化,就不会付出代价去创建单例的实例。
Effective Java, 2nd推荐在Java 5或更新的版本中使用enum来实现Singleton模式。那看看这段代码的输出:
public class Program { public static void main(String[] args) { System.out.println("main()"); System.out.println("leaving main()"); }}enum Singleton { INSTANCE; Singleton() { System.out.println("Singleton()"); }}
结果是:
<div class="quote_title">引用
页:
[1]