在设计抽象类时,我应该考虑序列化问题吗?

时间:2011-11-24 12:52:06

标签: java eclipse serialization abstract-class

通常这个问题来自Eclipse建议在抽象类上添加串行版本UID。

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

所以我的问题是将@SuppressWarnings("serial")放在一个扩展器将被序列化(并且它们将具有serialVersionUID)的抽象类上是安全的吗?

在设计扩展器的序列化抽象类时,还要注意任何其他问题。

感谢。

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:3)

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