提问者:小点点

为什么我会得到这样的消息:“可序列化类Input Exception没有声明long类型的静态最终串行Verison UID字段”?


我有一个扩展异常的公共类。这是我的自定义异常类,如下所示:

package com.yahoo.chris511026.paragraphcount;

    public class InputException extends Exception {

    public String getMessage() {

        return "Error: No text entered.";

    }

}

InputException下面是一条黄色的线,表示InputException类没有声明long类型的静态最终版本UID字段。如果我的类没有实现Seraliazble接口,为什么会这样说?我该怎么做才能明确解决这个问题。我不想修改或添加任何代码。


共3个答案

匿名用户

这是一个警告,而不是错误。需要指出的是,向任何可序列化的类添加一个< code>serialVersionUID字段是一个很好的做法。并且您的异常类已经是可序列化的,因为它间接扩展了< code>Throwable,并且< code>Throwable实现了< code>Serializable。

(如果未定义serialVersionUID字段,则JVM会根据类的当前API定义动态计算一个字段。这会使您更容易因类更改而出现序列版本UID不匹配的问题。)

如果我的类没有实现Seraliazble接口,为什么会这样说?

不,不是这么说的。

我该怎么做才能明确解决这个问题。我不想修改或添加任何代码。

有三种方法可以解决这个问题:

>

  • 如果不想更改任何代码,请修改IDE的编译器设置以禁用此警告。

    添加< code>serialVersionUID字段;例如,使用您的IDE加速器,它应该为您提供使用标准算法进行计算的选项。

    添加适当的@SuppressWarning注释。如果将来需要序列化异常对象的可能性为零,那么这将是合适的。

  • 匿名用户

    您扩展了< code>Exception,它本身扩展了实现< code>Serializable的< code>Throwable。

    更新,因为有点太多是在评论中结束:

    选项:

    • 添加id
    • @抑制警告(“串行”)
    • 将IDE配置为忽略它
    • 一起忽略它

    匿名用户

    Exception类实现了Serializable接口,通过继承,您的类也实现了该接口。

    串行版本唯一id存在,以便您可以在反序列化时区分同一类的版本(例如,如果您稍后想向类添加新成员,这将使其与没有该成员的旧版本不兼容)。