gpt4 book ai didi

java - 序列化如何协调静态成员?

转载 作者:行者123 更新时间:2023-12-02 03:43:44 25 4
gpt4 key购买 nike

作为一名新手,我试图理解序列化,但我不明白为什么在反序列化后需要重新分配静态字段(正如一些人建议的为了保留原始值)如果根据定义同一类的所有对象具有相同的静态参数值。新对象不是会自动接收其类的所有静态参数吗?我的意思是,如果反序列化使对象的静态成员无效并且我们保留原始对象,这是否意味着同一类中会有两个具有不同静态参数值的对象?这怎么可能,或者我怎么错了?

编辑:看来是我表达得不够清楚,抱歉。

在写第一句话时,我想起了Bruce Eckel 的“Thinking in Java”(第四版)。我不确定我是否可以在不侵犯版权的情况下附上他的书的一些扫描件,但我实际上偶然发现了“对象序列化”章节中的最后一个示例(第715-718页).通过他的 io/StoreCADState.javaio/RecoverCADState.java,Eckel 获取具有不同静态值的同一类的对象。他对我的解释不够深入,我感到完全困惑。

我知道静态成员属于类而不是对象。虽然我现在不确定这到底意味着什么。我曾经认为这意味着每当创建一个对象时,都会从类描述中“获取”一组静态参数并将其“添加”到对象中。如果这是正确的,那么当对象实例被转换为特定类时,为什么它们在反序列化后没有“添加”到对象中?

最佳答案

查看静态成员的 Javadoc here 。内容是这样的:

They are associated with the class, rather than with any object.

由于静态成员永远不会与任何对象关联,因此在序列化对象时它们永远不会被存储。此外,new object 不会自动接收所有静态参数,因为它们与objects 的序列化-反序列化无关。如果您尝试使用对象存储static变量,那么我会说这是一个设计缺陷。如果我们想用对象保存它们的值,我们应该将它们声明为非静态。

更新:

如果您想用对象存储不可序列化的字段,那么您可以通过编写 readObject()writeObject() 方法的实现来实现。看看this的回答例如,SO问题。

关于java - 序列化如何协调静态成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36533602/

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