我最近才知道enum
是一种更有效的方法来实现单身人士。
单身enum
:
public enum Singleton{
INSTANCE;
public void doStuff(){
//......
}
public void doMoreStuff(){
//......
}
}
单身class
:
public class Singleton{
private static final INSTANCE = new Singleton();
private Singleton(){}
public static Singleton getInstance(){
return INSTANCE;
}
public void doStuff(){
//......
}
public void doMoreStuff(){
//......
}
}
问题:使用enum over class实现单例可能有什么优缺点?
答案 0 :(得分:1)
作为explained by Joshua Bloch,如果您的单例不可序列化,则这两种方法在功能上是相同的。虽然您可能希望将代码添加到私有Singleton
构造函数中,以防止反射被用于创建第二个实例。
如果您的单例是可序列化的,那么枚举方法将免费提供所有必要的管道,而使用静态字段方法,您必须自己添加。
在我看来,采用枚举方法没有任何缺点。
答案 1 :(得分:0)
我相信枚举是创建单例的最佳方法。如果您正在寻找不利之处