在阅读this问题的答案后,这是一个跟进问题。大多数人都热衷于推荐single element enums
超过singleton class
的实施。例如:
使用枚举的单身人士:
public enum Singleton{
INSTANCE;
public void doStuff(){
//......
}
public void doMoreStuff(){
//......
}
}
根据Java Docs;枚举类型是一种特殊的数据类型,它使变量成为一组预定义的常量。
我的问题:如果这是一个愚蠢的问题,请原谅我。由于单身人士能够维持应用程序的全局状态,在使用single element enums
实现单例时,如何使用单身人员保持不同的状态?
例如,如果我希望我的单身人士继续关注;
public myStringField="";
public int myIntField=0;
如何使用single element enums
?
答案 0 :(得分:1)
无论什么"州"你想要作为单身人士的一部分应该添加到单身实例本身。在下面的示例中,我添加了一个String to Singleton" state"。
enum Singleton{
INSTANCE("some string");
private String myString;
public void doStuff(){
//......
}
public void doMoreStuff(){
//......
}
Singleton (String myString_){
myString = myString_;
}
}
答案 1 :(得分:1)
将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;
}
}
当然存在很多差异,例如枚举默认是最终的(你不能扩展它们),你不能为枚举创建公共构造函数,枚举在序列化/反序列化期间有特殊行为等等。但毕竟,它们只是普通的课程,你可以期望它们在常见的情况下表现得像班级一样。