使用枚举实现单例(在 Java 中)

2022-08-31 06:04:44

我已经读到,可以使用如下方法在Java中实现:SingletonEnum

public enum MySingleton {
     INSTANCE;   
}

但是,上述方法如何工作?具体来说,必须实例化 。在这里,如何实例化?谁在做?ObjectMySingletonnew MySingleton()


答案 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


答案 2

类型是 的特殊类型。enumclass

您的遗嘱实际上被编译为类似enum

public final class MySingleton {
    public final static MySingleton INSTANCE = new MySingleton();
    private MySingleton(){} 
}

当您的代码首次访问 时,该类将由 JVM 加载并初始化。此过程初始化上面的字段一次(懒惰)。INSTANCEMySingletonstatic


推荐