Applet(不声明 long 类型的静态最终 serialVersionUID 字段)

Posted

技术标签:

【中文标题】Applet(不声明 long 类型的静态最终 serialVersionUID 字段)【英文标题】:Applet (does not declare a static final serialVersionUID field of type long) 【发布时间】:2013-08-29 16:00:02 【问题描述】:

我刚开始学习 Java 编程。我在 Applets(Applet 类)的第一章中给出了这个程序,它给了我这个错误。我试图找到解决方案,但找不到。

根据本书,该程序应该显示一个窗口,但是当我扩展 Applet 类时出现此错误:

"此行有多个标记 - 可序列化的类 AppletSkel 没有声明一个静态的最终 serialVersionUID 字段 长型 - 公共类型 AppletSkel 必须在其自己的文件中定义“

这是我的代码;

//An Applet Skeleton

import java.awt.*;
import java.applet.*;

/*<applet code="Appletskel" width=300 height=100>
</applet>*/

//错误

 public class AppletSkel extends Applet  
        public void init()
    

        public void start() 

        

        public void stop()

        

        public void destroy() 

        

        public void paint(Graphics g)
        

【问题讨论】:

如果您使用 eclipse,您可以单击该警告,Quickfix 并选择“添加生成的串行版本 ID”选项 - 然后 eclipse 将为您添加生成的串行版本 ID。 【参考方案1】:

第一条消息不是错误,而是警告。因为 Applet 实现了 Serializable 接口,所以它应该有一个唯一的长标识符,称为 serialVersionUID 以遵循接口的约定。编译器警告你你的类不遵守这条规则,但请注意这只是一个警告。您的代码仍然可以编译(如果没有其他问题)并且仍然可以运行(如果没有其他问题)。

告诉编译器“闭嘴”并忽略问题的一种方法是在类声明之前使用注释:@SuppressWarnings("serial")

@SuppressWarnings("serial")
public class MyFoo 
   //...


第二条编译器消息是真正的编译错误:

公共类型 AppletSkel 必须在自己的文件中定义

您需要确保您的文件名与类名匹配。应该是AppletSkel.java。必须修复此问题,您的代码才能运行。

【讨论】:

【参考方案2】:

在您的@WebServlet 之前使用此代码以解决问题。 @SuppressWarnings("serial")

例如:

@SuppressWarnings("serial")
@WebServlet("/Servlet")

【讨论】:

以上是关于Applet(不声明 long 类型的静态最终 serialVersionUID 字段)的主要内容,如果未能解决你的问题,请参考以下文章

serializable 类 DrawImage 未声明类型为 long 的静态终态 是啥意思

为啥java中的serialVersionUID必须是静态的、最终的和long类型的? [复制]

何时选择变量来声明为最终静态

C#中静态字段声明时赋值与构造函数中赋值

「6」数据类型

将静态最终短线转换为短线的原因?