繁体   English   中英

如何序列化包含不可序列化对象的最终字段

[英]How to serialize a final field containing a non-serializable object

我的不可变类(所有字段均为final)包含对未实现Serializable的第三方类的对象的引用。 通常的解决方法是(如如何在Java中序列化不可序列化的接受答案中所述 )使用writeObjectreadObject方法创建自定义序列化格式。 但是, readObject不是构造函数,因此无法更新final字段。 我已经看到使用readResolve解决此问题的建议 ,但是看不到它如何工作,因为我看不到如何获取将final字段初始化为该方法所必需的数据(显然,它只能访问我已经初始化的字段,我真的不希望在对象中创建一个新的可变字段,以便在反序列化期间临时使用该字段(当该对象应该是完全不变的时)。 那么如何使反序列化工作呢?

public class ThisDoesntWork implements Serializable
{
   private final transient SomeNonSerializableClass object;
   private void writeObject (ObjectOutputStream out) throws IOException
   {
      out.writeUTF (object.toString());
   }
   private void readObject (ObjectInputStream in) throws IOException
   {
      object = SomeNonSerializableClass.fromString(in.readUTF()); // error!
   }
}

您可以使用writeReplace()编写不同 (代理)类的对象,并使用readResolve()根据代理中的值构造原始类的对象。 构造函数可以设置final字段。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM