用Enum實現(xiàn)Singleton(用Java我已經(jīng)讀過可以Singleton使用以下方法在Java中實現(xiàn)Enum:public enum MySingleton {
INSTANCE; }但是,上面的工作如何?具體而言,Object必須實例化。在這里,如何MySingleton被實例化?誰在做什么new MySingleton()?
3 回答

蕭十郎
TA貢獻(xiàn)1815條經(jīng)驗 獲得超13個贊
這個,
public enum MySingleton { INSTANCE; }
有一個隱式的空構(gòu)造函數(shù)。改為明確,
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
類型的實例。并且,它們是在第一次引用枚舉類型時構(gòu)造的。

滄海一幻覺
TA貢獻(xiàn)1824條經(jīng)驗 獲得超5個贊
一種enum
類型是一種特殊類型的class
。
你的enum
意志實際上會被編譯成類似的東西
public final class MySingleton { public final static MySingleton INSTANCE = new MySingleton(); private MySingleton(){} }
當(dāng)您的代碼首次訪問時INSTANCE
,該類MySingleton
將由JVM加載并初始化。此過程初始化static
上面的字段一次(懶惰)。
添加回答
舉報
0/150
提交
取消