好的,所以这个问题主要与以下问题有关:有更好的方法吗?
我有一个电话簿应用程序,你可以添加用户,删除它们等,每个人被分配一个不同的ID#。 Person类将lastID用作静态类变量。电话簿类有一个人物矢量。
我的解决方法是:为Person类创建一个新的非静态变量,并在序列化/保存时,仅为向量中的第一个元素,将静态变量的数据存储到这个新变量中。然后,在反序列化时,使用第一个Person的变量重新设置静态变量。
回到我原来的问题:是否有更好/更正式/更合适的方法来做到这一点?
答案 0 :(得分:3)
更好的解决方案(IMO)是使lastIdUsed
成为PhoneBook
类的实例字段。听起来你已经在序列化该类的一个实例......
FWIW - 使lastIdUsed
Person
的实例字段只是糟糕的对象建模。该字段几乎永远不会有用,几乎永远不会有有效值。对于Person
中的第一个序列化PhoneBook
,它只有一个有效值。
答案 1 :(得分:0)
首先,我会完全避免这种事情。静态变量由于某种原因是不可序列化的,即通过反序列化某些会使其他对象的状态无效的东西。例如,如果您的lastUsedId
为10,并且您将对象的反序列化为5,则可能会导致创建重复项(6-10)。
但是,如果您仍然要这样做,请查看Externalizable
界面。它允许您控制对象的序列化和反序列化。这里[1]是一个很好的讨论。在过去,我使用Externalizable
来更严格地控制被序列化对象的格式以节省空间。如果确实想要,可以序列化静态变量并在反序列化时设置它。如果它高于当前内存中的值,您甚至可以设置它。同样,像其他评论者一样,我会完全反对这种方法,但学习这些东西并没有什么坏处,嗯?
[1] What is the difference between Serializable and Externalizable in Java?