这是什么意思:可串行类没有声明一个静态的finalVersionUID字段?

问题:

我在标题中给出了警告信息。我想了解并删除它。我在这个问题上发现了一些答案,但是由于技术术语的超载,我不明白这些答案。用简单的话可以解释这个问题吗?
附:我知道OOP是什么。我知道什么是对象,类,方法,字段和实例。
P.P.S.如果有人需要我的代码就在这里:

import java.awt.*;
import javax.swing.*;


public class HelloWorldSwing extends JFrame {

        JTextArea m_resultArea = new JTextArea(6, 30);

        //====================================================== constructor
        public HelloWorldSwing() {
            //... Set initial text, scrolling, and border.
            m_resultArea.setText("Enter more text to see scrollbars");
            JScrollPane scrollingArea = new JScrollPane(m_resultArea);
            scrollingArea.setBorder(BorderFactory.createEmptyBorder(10,5,10,5));

            // Get the content pane, set layout, add to center
            Container content = this.getContentPane();
            content.setLayout(new BorderLayout());
            content.add(scrollingArea, BorderLayout.CENTER);
            this.pack();
        }

        public static void createAndViewJFrame() {
            JFrame win = new HelloWorldSwing();
            win.setTitle("TextAreaDemo");
            win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            win.setVisible(true);
        }

        //============================================================= main
        public static void main(String[] args) {
            SwingUtilities.invokeLater(new Runnable(){
                public void run(){
                    createAndViewJFrame();
                }
            });
        }

}

回答:

javadoc

序列化运行时将每个可序列化的类与称为serialVersionUID的版本号相关联,该序列号在反序列化期间用于验证序列化对象的发送者和接收者是否已加载与序列化兼容的对象的类。如果接收方加载了与对应发件人类不同的serialVersionUID的对象的类,则反序列化将导致InvalidClassException。可序列化类可以通过声明一个名为"serialVersionUID"的字段来明确地声明自己的serialVersionUID,该字段必须是static,final和long类型:

您可以将IDE配置为:

  • 忽略这一点,而不是发出警告。
  • 自动生成ID

根据你的另外一个问题“可能是所讨论的警告信息是为什么我的GUI应用程序冻结?”:
不,不可能。只有在序列化对象并将其反序列化在不同的地方(或时间)(类)已更改时,才会导致问题,并且不会导致冻结,但在InvalidClassException

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: What does it mean: The serializable class does not declare a static final serialVersionUID field?

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

+ 59 = 68