3 回答
TA贡献1799条经验 获得超9个赞
从javadoc:
序列化运行时与每个可序列化的类关联一个版本号,称为serialVersionUID,在反序列化过程中使用该版本号来验证序列化对象的发送者和接收者是否已加载了该对象的与序列化兼容的类。如果接收者为对象加载的类serialVersionUID与相应的发送者的类不同,则反序列化将导致InvalidClassException。可序列化的类可以serialVersionUID通过声明一个"serialVersionUID"必须为静态,最终且类型为long 的字段来显式声明其自身:
您可以将IDE配置为:
忽略它,而不是发出警告。
自动生成一个id
根据您的其他问题“可能是所讨论的警告消息是我的GUI应用程序冻结的原因吗?”:
不,不可能。仅当序列化对象并在类已更改的其他位置(或时间)对对象进行反序列化时,它才可能导致问题,并且不会导致冻结,而会导致冻结InvalidClassException。
TA贡献1796条经验 获得超4个赞
警告的原因已在此处记录,简单的修复方法是关闭警告或在代码中添加以下声明以提供版本UID。实际值无关紧要,如果愿意,可以从999开始,但是在对类进行不兼容的更改时,请更改为实际值。
public class HelloWorldSwing extends JFrame {
JTextArea m_resultArea = new JTextArea(6, 30);
private static final long serialVersionUID = 1L;
TA贡献1790条经验 获得超9个赞
到目前为止,其他答案都有很多技术信息。我将尝试按要求用简单的方式回答。
如果要将对象转储到原始缓冲区,将其保存到磁盘,以二进制流传输(例如,通过网络套接字发送对象)或以其他方式创建序列化对象,则对对象实例进行序列化对象的二进制表示形式。(有关序列化的更多信息,请参见Wikipedia上的Java序列化)。
如果您不想序列化您的类,则可以在类上方添加注释@SuppressWarnings("serial")。
如果要序列化,那么您将有很多事情要担心,所有问题都围绕UUID的正确使用。基本上,UUID是一种“版本化”您要序列化的对象的方法,这样,无论是反序列化的进程都知道它已正确地反序列化。我将查看确保序列化对象的正确版本控制以获取更多信息。
添加回答
举报