java - Enum Singleton中静态getInstance方法的目的是什么?
问题描述
我正在使用 Enum 进行单例实现,并注意到静态 get 实例方法:
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;
}
}
由于 Enum 默认情况下是公共的,因此我可以执行以下操作:
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() 的用例是什么?
解决方案
就像这里描述的:https ://www.baeldung.com/java-singleton
有一些方法可以实现单例:像普通类和枚举。
要使用我们的 ClassSingleton,我们只需要静态获取实例:
ClassSingleton classSingleton1 = ClassSingleton.getInstance();
System.out.println(classSingleton1.getInfo()); //Initial class info
ClassSingleton classSingleton2 = ClassSingleton.getInstance();
classSingleton2.setInfo("New class info");
System.out.println(classSingleton1.getInfo()); //New class info
System.out.println(classSingleton2.getInfo()); //New class info
至于 EnumSingleton,我们可以像使用任何其他 Java Enum 一样使用它:
EnumSingleton enumSingleton1 = EnumSingleton.INSTANCE.getInstance();
System.out.println(enumSingleton1.getInfo()); //Initial enum info
EnumSingleton enumSingleton2 = EnumSingleton.INSTANCE.getInstance();
enumSingleton2.setInfo("New enum info");
System.out.println(enumSingleton1.getInfo()); // New enum info
System.out.println(enumSingleton2.getInfo()); // New enum info
推荐阅读
- java - 如何在 Spring Data jpa 上修复我的存储库创建
- ruby - 如何从 Sinatra 配置 Thin Web 服务器?
- vuejs2 - Vue cli 3 - 纽约伊斯坦布尔代码报告不包括 vue 文件
- python - python - 前6个元素:做循环然后取下6个元素,重复
- matrix - 连接可变结构的数组
- php - AWS:如何将 EC2 的 IAM 角色配置为 Web 服务器
- tensorflow - 张量流中的 Levenberg-Marquardt
- regex - 使用正则表达式提取包含搜索字符串的行
- jersey-2.0 - 当 Grizzley 服务器关闭时,泽西资源 @PreDestroy 没有被调用
- django - Django 自动在表单中添加外键