使用串行版本 UID 还是禁止显示警告?

2022-08-31 13:30:58

我想创建一个类,例如,扩展HttpServlet?我的编译器警告我,我的类应该有一个 serialVersionUID。如果我知道此对象永远不会被序列化,我应该定义它还是添加注释来禁止显示这些警告?

你会怎么做,为什么?


答案 1

我不知道Java的最佳实践,但是我突然想到,如果你声称序列化永远不会发生,你可以添加一个写Object方法。然后禁止警告,安全地知道它不可能适用于您。

否则,将来有人可能会通过父类序列化您的对象,并最终得到默认的序列化形式,其中:

  • 表单在不同版本的代码之间不兼容。
  • 您已经抑制了这种情况的警告。

添加 ID 听起来像是一个麻烦,因为你真正想做的不是序列化。期望调用方不要序列化你的对象意味着你希望他们“知道”他们的HttpServlet何时属于你的类。多态性的破坏是因为你有一个不可序列化的可序列化对象,你不能被序列化,你至少可以做的是确保粗心的调用者知道它。


答案 2

如果不打算序列化实例,请添加禁止警告。

生成的串行 ID 可能有点危险。它表明您有意为其提供了一个序列号,并且保存它以进行序列化和反序列化。很容易忘记在类发生更改的较新版本的应用程序中更新序列号。如果类字段已更改,反序列化将失败。使用抑制警告至少可以告诉代码的读者您不打算序列化此类。