当前位置: 首页 > 面试题库 >

如何确保序列化世界中的Java实例控件(无枚举)?

郜光明
2023-03-14
问题内容

在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(){};
}

问题答案:

您应该真正查看有效Java。关于Singleton的一章对此进行了一定程度的论述,而关于Typesafe Enum模式的一章无疑对实现方式产生了影响enum。

简短的答案是您必须实施readResolve。



 类似资料:
  • 我需要序列化/反序列化特定枚举: 我有个例外: 我如何通过GSON序列化/反序列化它?

  • 问题内容: 这是此问题的后续措施。该解决方案防水吗? 问题答案: 该解决方案防水吗? 否。(尽管可能就足够了,取决于使用代码的方式和位置。) 在 条目77:例如实例控件中,更喜欢枚举类型来读取readResolve (Effective Java,第二版 ),Bloch演示了攻击者如何使像您这样的类返回任何值。攻击依赖于手工字节输入并能够在目标上运行代码(因此,如果在沙盒环境,某些RMI案例等中使

  • 如果您看到我的实体类,我在teacher.java中有一组枚举。 当我试着发布这个时,我会出错 我已经尝试了几乎所有的解决方案,比如,但没有成功。

  • 问题内容: 作为Java编程领域的新手,这个问题一直困扰着我。我首先相信所有Java文件都会被压缩并随后运行,但是我很快意识到情况并非总是如此。有人可以向我解释我们如何将Java应用程序实际上编织到日常生活的真实产品中吗? TL; DR:我们如何实现实际使用的代码? 问题答案: 这取决于应用程序。有许多选项,取决于您希望用户如何使用您的应用程序。通常将其包装为罐子或专用罐子(战争,耳朵)。 从理论

  • 从ObjectInputStream的Javadoc: 枚举常量的反序列化方式不同于普通的可序列化或可外部化对象。枚举常量的序列化形式仅由其名称组成;常数的字段值不会被传输。要反序列化枚举常量,ObjectInputStream从流中读取常量名称;然后通过调用静态方法Enum获得反序列化常量。valueOf(类,字符串),枚举常量的基类型和接收到的常量名称作为参数。与其他可序列化或可外部化的对象一

  • 4.2.真实世界的例子 我们要做的是一个Twitter应用。用户的需求很清楚,那就是发新消息、查看朋友的新消息,这也正是它的基本功能。除此之外,我们还需要事先获知用户的用户名和密码才能登录Twitter。由此可知,我们需要三个界面。 其次,我们希望应用程序能够流畅地运行,而回避开网络连接情况的影响。应用程序应该只在设备联网时抓取Twitter消息,并缓存到本地。为此,我们需要用到一个后台运行的Se