Java 在设计抽象类时,应该考虑串行化问题吗?

Java 在设计抽象类时,应该考虑串行化问题吗?,java,eclipse,serialization,abstract-class,Java,Eclipse,Serialization,Abstract Class,一般来说,这个问题来自Eclipse,它建议在抽象类上添加一个串行版本的UID 由于该类是抽象的,因此该类的实例将永远不存在,因此它们将永远不会被序列化(只有派生类才会被序列化) 因此,我的问题是,在一个抽象类上放置一个@SuppressWarnings(“串行”)是否安全?谁的扩展程序将被序列化(并且它们将具有SerialVersionUID) 另外,当设计一个抽象类时需要注意的任何其他问题都是受欢迎的,因为抽象类的扩展程序将被序列化 谢谢。如果不是绝对需要(如果没有状态),请不要使抽象类可序

一般来说,这个问题来自Eclipse,它建议在抽象类上添加一个串行版本的UID

由于该类是抽象的,因此该类的实例将永远不存在,因此它们将永远不会被序列化(只有派生类才会被序列化)

因此,我的问题是,在一个抽象类上放置一个
@SuppressWarnings(“串行”)
是否安全?谁的扩展程序将被序列化(并且它们将具有SerialVersionUID)

另外,当设计一个抽象类时需要注意的任何其他问题都是受欢迎的,因为抽象类的扩展程序将被序列化


谢谢。

如果不是绝对需要(如果没有状态),请不要使抽象类可序列化。您将需要终身维护类序列化表单,并为以前版本的序列化表单提供向后兼容性。但是您仍然需要提供一个无参数构造函数,以防扩展类自己实现可序列化


如果您决定实现Serializable接口,则需要抽象类上的串行版本uid,否则当发布新版本的抽象类时,扩展类的序列化形式将中断。

每个可序列化类都需要一个
serialVersionUID
。如果一个对象的运行时类型本身扩展了一个可序列化的类,那么就涉及到两个
serialVersionUID
s。因此,是的,您需要它,除非您决定不支持跨版本序列化(如Swing)。

您的意思是,在反序列化时,父级和子级可序列化类的UID都很重要?@Simeon是的,每个可序列化类都很重要。