它意味着什么:的序列化类不宣布一个静态的最终serialVersionUID领域?[重复]
-
21-09-2019 - |
题
这个问题已经有一个答案在这里:
我已经警告信息给定的标题。我想了解和将其删除。我已经找到一些答案在这个问题,但我不明白这些问题的答案,因为载有技术术语。是否可以解释这个问题,简单的词?
P.S.我知道什么是面向对象。我知道什么是对象,类、方法领域和实例。
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();
}
});
}
}
解决方案
从 如果是的话,为什么不试:
化运行时将与每个序列化类的一个版本的数量,称为
serialVersionUID
, ,这是使用过反验证的发送和接收的化对象已载入课程,对象是兼容的,相对于serialization.如果接收器已经装载一类为对象具有不同的serialVersionUID
比相应的发送者的类,然后反将导致一个InvalidClassException
.一个序列化类可以宣布自己serialVersionUID
明确地宣布,一场名为"serialVersionUID"
这必须是静态的,最终和类型的长:
你可以配置IDE:
- 忽略这一点,而不是给一个警告。
- 自动生成一个id
按您的附加问题",可以说讨论了警告信息是一个原因为什么我GUI应用程序冻结?":
不,这不可能的。它可以引起一个问题,只有如果你顺序的对象和反序列化它们在不同的地方(或时间)在(当时)的类已经改变,并且这将不会导致冻结,但在 InvalidClassException
.
其他提示
原因,警告记录了 在这里,, ,以及简单修正关闭警告,或者将以下的宣言,在你的代码来源的版本UID。实际价值是不相关的,开始与999如果你喜欢,但是改变它的时候你使不相容的更改类。
public class HelloWorldSwing extends JFrame {
JTextArea m_resultArea = new JTextArea(6, 30);
private static final long serialVersionUID = 1L;
其他的答案,迄今有很多的技术信息。我会尽量回答的请求,在简单的条款。
化是你做的对象的实例如果你想要转储到一个原始缓冲区,保存到磁盘、运输在一个二流(例如,发送对象,通过网络socket),或者创建一个二进制序列化表示的对象。(欲了解更多信息序列化看看 Java化上的维基百科).
如果你有没有打算将你的课,你可以添加的注释上你的课 @SuppressWarnings("serial")
.
如果你要serialize,那么你有许多事情要担心的都围绕着适当的积.基本上,东的一种方式"版本"的对象,你会serialize因此,不管过程是将知道它的de-顺序正确。我想看看 确保适当的版本控制化的对象 更多的信息。
任何类别的可行化(即实现了 Serializable
)应宣布UID,它必须改变,每当有什么变化影响的序列(其他字段,删除段,改变的领域以,...).该领域的价值,为检查期间反,如果价值的化对象并不等于值班级在当前的虚拟机,一个例外被抛出。
注意,这值是特殊的,这是化与对象虽然是静态的原因,以上所述。