Tag: serialversionuid

显式serialVersionUID被认为有害吗?

我可能会冒这个问题冒险。 在我看来,为新类明确指定serialVersionUID是不好的。 考虑两种情况,即在布局应该更改时不更改它,并在不应该更改时更改它。 几乎只有在明确的情况下才会发生变化。 在这种情况下,它会导致一些非常微妙,难以发现的错误。 特别是在开发过程中,类布局经常变化。 但是如果它没有明确指定,它将会改变并且反序列化将大声破坏,最有可能通过清除存储库来解决。 不应该发生的情况几乎只有在隐含时才会发生。 这是一种罕见的情况,其中类布局已更改但我们仍希望从旧的序列化blob反序列化。 这可能会在QA期间被捕获( 从5.2升级到5.2.1之后的奇怪错误,请参阅附加的堆栈跟踪 ),并且可以通过设置显式值来轻松修复。 注释?

使Java运行时忽略serialVersionUIDs?

我必须处理大量已编译的Java类,这些类没有明确指定serialVersionUID。 因为它们的UID是由编译器任意生成的,所以许多需要序列化和反序列化的类最终导致exception,即使实际的类定义匹配。 (当然,这是所有预期的行为。) 我回过头来修复所有这些第三方代码是不切实际的。 因此,我的问题是:有没有办法让Java运行时忽略 serialVersionUID中的差异,并且只有在结构存在实际差异时才能反序列化?