在序列化的世界中,如何保证Java实例控制(没有枚举)?
在Java 1.5之前的世界中(因此没有在序列化的世界中,如何保证Java实例控制(没有枚举)?,java,Java,在Java 1.5之前的世界中(因此没有enum),在对象被序列化的情况下,如何实施适当的实例控制?我说的是这样一个类,据我所知,我不确定instance0和instance1是否总是唯一的实例 import java.io.Serializable; public final class Thing implements Serializable { private static final long serialVersionUID = 1L; public stati
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(){};
}
private Object readResolve() throws ObjectStreamException {
return PRIVATE_VALUES[ordinal]; // The list holding all the constant instances
}
你真的应该退房。关于Singleton的一章在某种程度上解决了这一问题,其中有一章介绍了类型安全枚举模式,它肯定会对
Enum
的实现方式产生影响
简而言之,您必须实现
readResolve
如果我理解正确,那么您需要的是接受Joshua Bloch的建议并实现readResolve方法以返回一个常量实例
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(){};
}
private Object readResolve() throws ObjectStreamException {
return PRIVATE_VALUES[ordinal]; // The list holding all the constant instances
}
了解最新情况。即使是1.5也是其生命周期结束后的大部分时间。当然,我很想-但这不仅仅取决于我:(JJUMA,我感受到了你的痛苦。我处理的几个客户都害怕升级到最新版本的Java。非常害怕,事实上,有些客户仍在运行1.3!:)…这不安全,因为在readResolve之前可以抓到这个实例。哦,我看到有人已经提到了约书亚的书。强烈推荐阅读btw.Tom,你能解释一下原因吗?这就是为什么我告诉JJUMA去阅读有效Java中的适当内容。