当我们序列化对象时,静态成员不会被序列化,但是如果需要的话,还有什么办法吗?
第一个问题是为什么需要序列化静态成员?
静态成员与类相关联,而不与实例相关联,因此在序列化实例时将它们包括在内是没有意义的。
第一个解决方案是使那些成员不是静态的。或者,如果这些成员在原始类和目标类中是相同的(相同的类,但可能是不同的运行时环境),则根本不要序列化它们。
我对如何在静态成员之间进行发送有一些想法,但是我首先需要查看用例,因为在所有情况下这都意味着更新目标类,而且我还没有找到这样做的充分理由。
问题内容: 静态变量的值如何在序列化过程中持久化(如果完全持久化)。我在栈上读过类似的问题,它说静态变量本质上是瞬态的,即它们的状态或当前值未序列化。 我只是做一个非常简单的示例,我将一个类序列化并保存到文件中,然后再次从文件中重构该类。令人惊讶的是,我发现静态变量的值在序列化发生时和发生时都被保存了。 这是怎么发生的。这是因为类模板及其实例信息是在序列化期间保存的。这是代码片段- 这是我的主班
问题内容: 我正在使用一些静态方法和字段进行保存状态序列化。我可能已经发誓,尽管序列化和static造成了混乱。我应该使所有静电瞬变吗?并扩大通话会恢复正常的静态吗? 问题答案: s是隐式的,因此您不需要这样声明它们。 序列化用于序列化 实例 ,而不是 类 。 字段(方法是不相关的,因为它们是类定义的一部分,所以它们不被序列化)将被重新初始化为加载类时它们设置的任何值。 如果您具有可变字段,则对该
考虑以下代码: GCC v6.1编译它,叮当声3.8拒绝它,错误如下: 2:错误:没有成员名为'foo'在'U' struct S{静态constexpr int bar=T::foo;}; 哪个编译器是对的? 会不会是因为在我们尝试在中使用它时不是一个完整的类型? 在这种情况下,它应该被认为是GCC的错误,但我想知道我是否正确之前在错误跟踪器上搜索/打开问题… 编辑 与此同时,我已经向GCC打开
问题内容: 如果我尝试序列化静态属性会怎样? 谢谢 问题答案: 从这篇文章: 提示1:处理静态变量 Java类通常在静态类变量中包含一些全局相关的值。我们不会进入有关全局变量是否适当的争论的悠久历史- 只能说程序员继续发现它们有用,而纯粹主义者建议的替代方案并不总是可行的。 对于声明时初始化的静态变量,序列化不会出现任何特殊问题。第一次使用该类时,相关变量将设置为正确的值。 某些静态无法通过这种方
对于“何时”有很多很好的答案,比如在这个线程中——静态类初始化何时发生?现在我的问题是“如何”。这是斯蒂芬C.的回答中的一段话 类静态初始化通常在第一次发生以下事件之前立即发生: 将创建该类的一个实例, 调用该类的静态方法, 已分配类的静态字段, 使用非恒定静态场,或 对于顶级类,执行词汇嵌套在类中的assert语句 那么它是如何在内部完成的呢?每个可能触发初始化的指令都用包装?任何工作的细节:-
有没有方法用子类的静态成员类参数化超类? exampleSuperClass.java: 编译失败,错误为: 或者与: 成员不能解析为类型 如果用另一个包保护的顶级类来参数化ExampleSubClass,它工作得很好(也就是没有错误)。 这背后的驱动力是我有一个泛型超类和许多不同的和对。但是由于只被引用,最好是: 限制的访问,使其成为静态成员类和 通过不给自己的文件来减少文件数。 那么,在参数化