我有一个扩展异常的公共类。这是我的自定义异常类,如下所示:
package com.yahoo.chris511026.paragraphcount;
public class InputException extends Exception {
public String getMessage() {
return "Error: No text entered.";
}
}
InputException下面是一条黄色的线,表示InputException类没有声明long类型的静态最终版本UID字段。如果我的类没有实现Seraliazble接口,为什么会这样说?我该怎么做才能明确解决这个问题。我不想修改或添加任何代码。
这是一个警告,而不是错误。需要指出的是,向任何可序列化的类添加一个< code>serialVersionUID字段是一个很好的做法。并且您的异常类已经是可序列化的,因为它间接扩展了< code>Throwable,并且< code>Throwable实现了< code>Serializable。
(如果未定义serialVersionUID
字段,则JVM会根据类的当前API定义动态计算一个字段。这会使您更容易因类更改而出现序列版本UID不匹配的问题。)
如果我的类没有实现Seraliazble接口,为什么会这样说?
不,不是这么说的。
我该怎么做才能明确解决这个问题。我不想修改或添加任何代码。
有三种方法可以解决这个问题:
>
如果不想更改任何代码,请修改IDE的编译器设置以禁用此警告。
添加< code>serialVersionUID字段;例如,使用您的IDE加速器,它应该为您提供使用标准算法进行计算的选项。
添加适当的@SuppressWarning
注释。如果将来需要序列化异常对象的可能性为零,那么这将是合适的。
您扩展了< code>Exception,它本身扩展了实现< code>Serializable的< code>Throwable。
更新,因为有点太多是在评论中结束:
选项:
Exception类实现了Serializable接口,通过继承,您的类也实现了该接口。
串行版本唯一id存在,以便您可以在反序列化时区分同一类的版本(例如,如果您稍后想向类添加新成员,这将使其与没有该成员的旧版本不兼容)。