关于java:eclipse中的serialVersionUID字段警告

serialVersionUID field warning in eclipse

我刚开始使用awt,并在其中制作了一个简单的程序,它可以正常工作,但它在Eclipse中显示了一条警告消息,我不理解:

The serializable class TestGUI does not declare a static final
serialVersionUID field of type long

我知道警告消息与awt无关,不需要发布我的整个代码,但是当我试图对代码进行SSCCE时,警告也消失了。因为我不知道为什么会产生这个警告,所以我不知道应该在我的SSCC中保留哪个部分。这就是整个代码!

我的代码是:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class TestGUI extends Frame {
    /**
     * @param args
     */

    private int x = 50;
    private int y = 50;

    TestGUI(String s) {
        addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent we) {
                setVisible(false);
                System.exit(0);
            }
        });
        addMouseListener(new MouseAdapter() {
            public void mouseClicked(MouseEvent me) {
                x = me.getX();
                y = me.getY();
                repaint();
            }
        });
    }

    public void paint(Graphics g) {
        g.drawString("Hello Princess", 100, 100);
        g.drawString("Mouse clicked here", x, y);
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        TestGUI tg = new TestGUI("first");
        tg.setSize(500, 500);
        tg.setVisible(true);
    }

}

提前谢谢!


Eclipse以前在默认情况下禁用该警告。在EclipseIndigo(3.7)中,默认设置是启用警告。您可以在两个位置更改设置,一个用于工作区中的所有内容,另一个用于单个项目。

若要禁用工作区中所有项目的警告,请转到窗口/首选项并打开Java/编译器/"错误/警告"选项卡,并打开"潜在的编程问题",然后更改"SerialValueCales无序列化UnID"的值以忽略(或任何您认为合适的)。

若要禁用单个项目的警告,可以右击项目,选择属性,然后转到Java编译器/"错误/警告",单击"启用项目特定的设置"(如果必要),然后选择"潜在的编程问题",并更改"SerialValueCurrar类中没有序列化版本"的值(或者忽略您的想法)。是适当的)。


TestGUI扩展Frame,进而实现SerializableSerializable接口的一个要求是有一个final long serialVersionUID字段。有关详细信息,请参阅可序列化的JavaDoc。

引用JavaDoc的重要部分:

1
2
3
...it is strongly recommended that all serializable classes explicitly declare
serialVersionUID values, since the default serialVersionUID computation is highly
sensitive to class details that may vary depending on compiler implementations...