gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 02:51:25 33 4
gpt4 key购买 nike

我的不可变类(所有字段均为final)包含对未实现Serialized 的第三方类的对象的引用。通常的解决方法是(如 How to serialize a non-serializable in Java? 的接受答案中所述)使用 writeObjectreadObject 方法创建自定义序列化格式。但是,readObject 无法更新 final 字段,因为它不是构造函数。我见过suggestion使用 readResolve 来解决这个问题,但无法看到这是如何工作的,因为我不知道如何获取将最终字段初始化到该方法中所需的数据(它显然只能访问我已经初始化的字段,并且我真的不想在对象中创建一个新的可变字段,以便在反序列化期间临时使用(当对象应该完全不可变时)。那么我怎样才能让我的反序列化工作呢?

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字段。

关于java - 如何序列化包含不可序列化对象的最终字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38536199/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com