Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在序列化的世界中,如何保证Java实例控制(没有枚举)?_Java - Fatal编程技术网

在序列化的世界中,如何保证Java实例控制(没有枚举)?

在序列化的世界中,如何保证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

在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(){};
}
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中的适当内容。