我可能会冒这个问题冒险.
在我看来,为新类显式指定serialVersionUID是不好的.考虑两种情况,即在布局应该更改时不更改它,并在不应该更改时更改它.
不应该改变它何时应该被改变发生几乎只有在它是明确的时候.在这种情况下,它会导致一些非常微妙,难以发现的错误.特别是在开发过程中,当类布局经常变化时.但是如果它没有明确指定,它将会改变并且反序列化将大声破坏,最有可能通过清除存储库来解决.
不应该发生的情况几乎只有在隐含时才会发生.这是一种罕见的情况,其中类布局已更改但我们仍希望从旧的序列化blob反序列化.这可能会在QA期间被捕获(从5.2升级到5.2.1之后的奇怪错误,请参阅附加的堆栈跟踪),并且可以通过设置显式值来轻松修复.
评论?
由于类布局更改以外的原因,更改何时不应该发生 - 问题在于它依赖于编译器实现.如果您使用Eclipse进行调试但使用javac进行生产构建,则最终可能会出现两个不兼容的数据集.
在我的工作中,我们明确禁止指定serialVersionUID,正是因为你提出的问题.
另外,我们持久化的类仅用于存储内部没有逻辑的数据,因此它们改变的唯一方法是更改数据成员.