java - 使用单元素枚举维护单例中的不同属性?

标签 java enums singleton

这是阅读 this 的答案后的后续问题问题。大多数人都热衷于推荐单元素枚举而不是单例实现。例如:

带有枚举的单例:

public enum Singleton{
INSTANCE;
    public void doStuff(){
        //......
    }
    public void doMoreStuff(){
        //......
    }
}

根据Java Docs ;枚举类型是一种特殊的数据类型,它使变量成为一组预定义的常量。

我的问题:如果这是一个愚蠢的问题,请原谅我。由于单例能够维护应用程序的全局状态,因此在使用单元素枚举实现单例时,如何使用单例维护不同的状态?

例如,如果我希望我的单例保持关注;

public myStringField="";
public int myIntField=0;

如何使用单元素枚举来做到这一点?

最佳答案

enum 视为无法实例化为常规类的特殊类类型。相反,您可以使用一种特殊的语法在枚举声明中创建一个或多个枚举实例。但在几乎所有其他方面,枚举只是常规类。

因此,粗略地说,您可以考虑以下两个相同的代码片段:

    public enum Enum {
        INSTANCE1,
        INSTANCE2("name");

        private String name;

        private Enum () {
            name = "";
        }

        private Enum (String name) {
            this.name = name;
        }
    }


    public final class Class {
        public static final Class INSTANCE1 = new Class();
        public static final Class INSTANCE2 = new Class("name");

        private String name;

        private Class () {
            name = "";
        }

        private Class (String name) {
            this.name = name;
        }
    }

当然有很多区别,例如枚举默认是最终的(你不能扩展它们),你不能为枚举创建公共(public)构造函数,枚举在序列化/反序列化期间有特殊的行为等等。但毕竟,它们只是常规类,您可以期望它们在常见情况下表现得像类。

关于java - 使用单元素枚举维护单例中的不同属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26038016/

相关文章:

swift - 可以在不使用 'Static' 的情况下创建单例类吗?

java - DownloadManager 未在状态栏中显示图标

java - 有没有办法检索java源文件?

java - java中的抽象与抽象

java - Android Studio - 目标 API 类中缺少类声明

java - 从数据库读取 ENUM 及其字段 (JPA)

java - 将枚举方法链接到客户端类的成员变量

design-patterns - 在不使用Singleton的情况下从非bean对象获取Spring Application上下文

enums - 如何使用模式验证 Karate 中的多个可能值

c# - Singleton:两全其美(想要实例化类)