一尘不染

用枚举实现Singleton(在Java中)

java

我已经读过,可以Singleton使用以下方式在Java中实现Enum

public enum MySingleton {
     INSTANCE;   
}

但是,以上内容如何运作?具体来说,Object必须实例化an 。在这里,如何MySingleton实例化?谁在做什么new MySingleton()


阅读 410

收藏
2020-03-04

共1个答案

一尘不染

这个,

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);
}

你会看到

Here
INSTANCE

enum字段是编译时间常数,但它们是其enum类型的实例。并且,它们是在首次引用枚举类型时构造的。

2020-03-04