【发布时间】:2021-04-03 11:16:14
【问题描述】:
我正在使用 Enum 进行单例实现,并注意到静态获取实例方法:
enum EnumSingleton {
INSTANCE("Initial class info");
private String info;
private EnumSingleton(String info) {
this.info = info;
}
public static EnumSingleton getInstance() {
return INSTANCE;
}
public String getInfo(){
return this.info;
}
}
由于枚举默认是公开的,我可以执行以下操作:
public class Main
{
public static void main(String[] args) {
EnumSingleton es = EnumSingleton.getInstance();
System.out.println(es.getInfo());
EnumSingleton es1 = EnumSingleton.INSTANCE;
System.out.println(es1.getInfo());
}
}
上述主要方法的输出都是 sops print :
Initial class info
Initial class info
那么 public static EnumSingleton getInstance() 的用例是什么?
【问题讨论】:
-
为什么将 Enum 与 Singleton 结合使用?这没有意义。
-
有多种方法可以实现单例,使用 Enum 创建的单例非常简单。它们提供了来自反射、序列化的安全保障,并且它是线程安全的。这是一篇有趣的文章:baeldung.com/java-singleton