在Java 1.5之前的世界中(所以没有enum
)并且我的对象被序列化,我该如何强制执行适当的实例控制?我说的是这样一个类,据我所知,我不确定instance0和instance1将永远是唯一的实例。
import java.io.Serializable;
public final class Thing implements Serializable {
private static final long serialVersionUID = 1L;
public static final Thing instance0 = new Thing();
public static final Thing instance1 = new Thing();
private Thing(){};
}
答案 0 :(得分:4)
你应该看看Effective Java。关于Singleton的章节对此进行了一些解释,并且有一章关于Typesafe枚举模式,这绝对会影响enum
的实现方式。
简短的回答是你必须实施readResolve
。
答案 1 :(得分:2)
如果我理解正确,那么你要找的是采用Joshua Bloch的建议并实现readResolve方法来返回你的一个常量实例。
private Object readResolve() throws ObjectStreamException {
return PRIVATE_VALUES[ordinal]; // The list holding all the constant instances
}
答案 2 :(得分:1)
这个link是sun的一个例子,与其他海报建议的Effective Java中的解决方案类似。