用Enum实现Singleton(用Java我已经读过可以Singleton使用以下方法在Java中实现Enum:public enum MySingleton {
INSTANCE; }但是,上面的工作如何?具体而言,Object必须实例化。在这里,如何MySingleton被实例化?谁在做什么new MySingleton()?
3 回答
萧十郎
TA贡献1815条经验 获得超13个赞
这个,
public enum MySingleton { INSTANCE; }
有一个隐式的空构造函数。改为明确,
public enum MySingleton { INSTANCE; private MySingleton() { System.out.println("Here"); }}
如果您随后添加了另一个类,使用main()
类似的方法
public static void main(String[] args) { System.out.println(MySingleton.INSTANCE);}
你会看到
HereINSTANCE
enum
字段是编译时常量,但它们是其enum
类型的实例。并且,它们是在第一次引用枚举类型时构造的。
沧海一幻觉
TA贡献1824条经验 获得超5个赞
一种enum
类型是一种特殊类型的class
。
你的enum
意志实际上会被编译成类似的东西
public final class MySingleton { public final static MySingleton INSTANCE = new MySingleton(); private MySingleton(){} }
当您的代码首次访问时INSTANCE
,该类MySingleton
将由JVM加载并初始化。此过程初始化static
上面的字段一次(懒惰)。
添加回答
举报
0/150
提交
取消