Java序列化: static variables not serializable: workaround

标签 java serialization static

好的,所以这个问题主要与:有没有更好的方法来做到这一点?

我有一个电话簿应用程序,您可以向其中添加用户、删除用户等,并且为每个人分配一个不同的 ID#。 Person 类将 lastIDused 存储为静态类变量。电话簿类有一个 Persons vector 。

我的解决方法的想法是这样的:为 Person 类创建一个新的非静态变量,并在序列化/保存时,仅对于 vector 中的第一个元素,将静态变量的数据存储到这个新变量中。然后,在反序列化时,使用第一个人的此类变量重新设置静态变量。

回到我原来的问题:有没有更好/更正式/正确的方法来做到这一点?

最佳答案

更好的解决方案(IMO)是使 lastIdUsed 成为 PhoneBook 类的实例字段。听起来您已经在序列化该类的实例...

FWIW - 将 lastIdUsed 设为 Person 的实例字段只是糟糕的对象建模。该字段几乎永远不会有用,也几乎永远不会有有效值。仅当 PhoneBook 中的第一个序列化 Person 时,它才具有有效值。

关于Java序列化: static variables not serializable: workaround,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20942291/

相关文章:

java - 您可以在不使用 return 命令的情况下从 while 循环返回字符串吗?

java - 使用 HTTPClient 在 android 中发送 HTTPS post 请求以获得未验证的证书

c# - 复杂 .Net 对象图的快速读/写

c++ - 初始化仅由一组对象共享的静态变量 C++

java - Java 中的私有(private)辅助方法与公共(public)静态实用程序方法

java.lang.ClassCastException : android.graphics.drawable.ColorDrawable无法转换为android.graphics.drawable.BitmapDrawable

java - 如何从字符串中获取drawable?

jQuery serializeArray 不包括单击的提交按钮

java - classCounter 变量会发生什么?

c# - 使用 ModuleBuilder 将类标记为 `internal static`