让我们假设我们有一个应该是可序列化的抽象类Foo
。
public abstract class Foo implements java.io.Serializable
{
...
}
为它添加唯一的串行版本标识long
是否有意义?如果是这种情况,您应该为其添加protected
修饰符,还是应该保留private
?
答案 0 :(得分:3)
所有扩展
Displayable
课程的班级都需要自己的serialVersionUID
长。添加受保护甚至公共修饰符不是更好吗?
没有。 serialVersionUID
变量仅与类的实例序列化相关。如何完成这纯粹是类本身的实现细节。将变量暴露给其他类是打破抽象......虽然以一种难以“利用”的方式。
或者,为了解决问题,通过使变量更加可见,实现了什么??除了序列化机制和可以使用变量的类之外,你能想到什么吗? (当然,它不会以任何方式强制执行Displayable
类的上述要求。)
值得的:
序列化机制使用反射来访问serialVersionUID
变量。
无论变量的可见性如何,序列化机制都将起作用。它只需要该字段为static
和final
。因此,如果您想要或需要您的类抽象来“泄漏”serialVersionUID
......那将起作用。