这是阅读 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/