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

要初始化瞬态场,最简单的解决方案是

相威
2023-03-14
问题内容
class MyClass implements Serializable {
  transient int myTransient;
  //Other variables
}

还原此类时,我想myTransient手动初始化,否则,我只想使用默认的序列化。

我该如何init()在不恢复整个序列化机制的情况下,将一种方法注入对象还原过程,就像Externalizable我希望做的那样?


问题答案:

实现readObject()方法:

private void readObject(java.io.ObjectInputStream in)
    throws IOException, ClassNotFoundException {
    in.defaultReadObject();
    myTransient = ...;
}

从javadoc:

在序列化和反序列化过程中需要特殊处理的类必须实现具有以下确切签名的特殊方法:

私有void readObject(java.io.ObjectInputStream
in)抛出IOException,ClassNotFoundException;

readObject方法负责从流中读取并还原类字段。它可以调用in.defaultReadObject来调用用于还原对象的非静态和非瞬态字段的默认机制。defaultReadObject方法使用流中的信息为流中保存的对象的字段分配当前对象中相应命名的字段。这处理了类已演化为添加新字段的情况。该方法无需将自身与属于其超类或子类的状态相关。通过使用writeObject方法将单个字段写入ObjectOutputStream或使用DataOutput支持的原始数据类型的方法来保存状态。

也可以看看:

  • Serializable Java文档


 类似资料:
  • 在使用Optaplanner 6.1.0解决车辆路线问题时,我遇到了错误 Java . lang . illegalstateexception:本地搜索阶段(1)需要从初始化的解决方案开始,但是实体的规划变量(Customer.previousStandstill)未初始化 它从解决开始。[org.optaplanner.core.impl.solver.DefaultSolver](Threa

  • 我正在为一所学校创建课程表生成器,我面临着两个挑战: 在构建启发式阶段,我没有得到任何回调传入这意味着我不能在这个阶段向用户提供任何反馈。(到今天为止只有大约10秒左右,但仍然很烦人。) 我怀疑这是设计使然(从这个问题来看),但如果我错了,请纠正我。 (我怀疑这样的想法是,构造启发式阶段无论如何都应该很快,并且99%的长时间运行的解决方案将花费在本地搜索阶段,因此这是唯一真正重要的阶段。对吗?)

  • 本文向大家介绍mysql安装忘记初始密码简单有效的解决方法,包括了mysql安装忘记初始密码简单有效的解决方法的使用技巧和注意事项,需要的朋友参考一下 在安装MySQL的时候会给定一个初始的密码,而这个初始的密码特别恶心人一堆大小写特殊字符。记住是不可能的,如果之前没有过安装经历的小伙伴第一次自主安装十有八九不会去注意这个。 ​ 本次教程使用的MySQL版本是8.0.19版本。8版本的应该都可以使

  • 问题内容: 有效的Java-要保持单例保证,您必须声明所有实例字段都是瞬态的,并提供一个“ readResolve”方法。通过在此处声明瞬态场能实现什么?这是一个示例: 无论我是否将’state’变量声明为瞬态,我都会将c.getState()gettign打印为25。我在这里缺少什么吗? 问题答案: 通过使属性变为瞬态而获得的好处是,您无需序列化状态。序列化是不必要的,因为无论如何它都会被rea

  • 本文向大家介绍简单了解java类的初始化以及类的实例化,包括了简单了解java类的初始化以及类的实例化的使用技巧和注意事项,需要的朋友参考一下 前言 上一篇我们知道了一个类的生命周期是:加载->验证->准备->解析->初始化->使用->卸载。 当初始化完成以后,一个类所有的类变量(被static修饰的变量)都被赋值。但是未被static修饰的成员变量又是何时被赋值的呢? 一个类何时会被初始化 一个

  • 我正在开发我的第一个 Swing 应用程序,现在提出了一个难题:在静态初始化期间或开始实际执行后执行引导和资源初始化。我是什么意思...我有单例: 因此,方法如下所示 或者,也许我在启动后手动初始化资源,然后运行它。逻辑上正确的方式是什么?