创建单例时,我想到的第一件事是
enum。我通常使用enum实现单例:
enum Singleton { INSTANCE;}
使用枚举可为您带来的好处之一就是序列化。
对于单例类,您将必须确保通过实现
readResolve()方法来确保序列化和反序列化不会创建新实例,而enum并非如此。
使用类,您应该这样创建单例:
public final class Singleton implements Serializable { // For lazy-laoding (if only you want) private static class SingletonHolder { private static final Singleton INSTANCE = new Singleton(); } private Singleton() { if (SingletonHolder.INSTANCE != null) { // throw Some Exception } } public static Singleton getInstance() { return SingletonHolder.INSTANCE; } // To avoid deserialization create new instance @SuppressWarnings("unused") private Singleton readResolve() { return SingletonHolder.INSTANCE; }}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)