Web 应用程序中的一个常见场景:
- 应用程序有很多类需要存储在 Session 中并且是可序列化的
- 开发人员收到一堆关于“Serializable 类未实现 serialVersionUID”的警告
- 开发者耸耸肩,点击 IDE 的“add serialversionUID”,问题就解决了吗?
我原则上不喜欢自动添加serialVersionUID,因为该解决方案本质上意味着
- 最重要的是开发人员说“我知道我的更改什么时候会破坏序列化,什么时候不会,并且想要控制它而不是 JVM”,而实际上他不知道这些事情并且不想控制它们
- 添加 serialVersionUID = 6266256561409620894L 既混乱又丑陋(好吧,你可以使用 1L)
我了解在类兼容性存在问题的应用程序中添加 serialVersionUID,开发人员会积极考虑并理解相关问题。
在典型的 Web 应用程序中,类的序列化何时中断并不重要。部署新版本时,可能会破坏一些无关的序列化会话,但这通常不是问题(很少有应用程序实际上正确处理序列化会话的版本兼容性)。
底线:建议“始终在源文件中明确定义 serialVersionUID”不是很简单吗?