使用serialVersionUID还是禁止警告?

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

你会做什么,为什么?


我不知道Java的最佳实践,但是在我看来,如果你声称序列化永远不会发生,你可以添加一个抛出的writeObject方法。 然后在知道它不可能适用于你的情况下安全地发出警告。

否则有人可能会在未来通过父类序列化对象,并最终得到一个默认的序列化表单,其中:

  • 该表单在您的代码的不同版本之间不兼容。
  • 你压制了这种情况的警告。
  • 添加一个ID听起来就像一个闪避,因为你真正想做的事情不是序列化。 期望呼叫者不要序列化你的对象意味着你期望他们“知道”他们的HttpServlet是你的课程。 这种多态性的破坏在你头上有一个不能被序列化的Serializable对象,你至少可以做的是确保不知情的调用者知道它。


    如果您不打算序列化实例,请添加SuppressWarning。

    生成的序列号可能有点危险。 它表明你有意给它一个序列号,并保存到序列化和反序列化。 很容易忘记更新应用程序的更新版本中的序列号,以便更改您的课程。 如果类字段已更改,则反序列化将失败。 有一个SuppressWarning至少告诉读者你的代码,你不打算序列化这个类。


    我拒绝被Eclipse恐吓,以增加我的代码混乱!

    我只是将Eclipse配置为不会在缺少serialVersionUID时生成警告。

    链接地址: http://www.djcxy.com/p/23851.html

    上一篇: Use the serialVersionUID or suppress warnings?

    下一篇: How to handle java.io.InvalidClassException?