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

package com.yahoo.chris511026.paragraphcount;

    public class InputException extends Exception {

    public String getMessage() {

        return "Error: No text entered.";

    }


}

在InputException下方是一条黄线,指示类InputException没有声明类型为long的静态最终版本UID字段。如果我的班级没有实现Serialiazble接口,为什么这么说呢?我该怎么做才能清楚解决此问题。我不想修改或向我的代码添加任何内容。

最佳答案

这是警告而不是错误。指出,将serialVersionUID字段添加到任何可序列化的类是一个好习惯。而且您的异常类已经可以序列化,因为它间接扩展了Throwable并且Throwable实现了Serializable

(如果未定义serialVersionUID字段,那么JVM将根据该类的当前API定义即时计算一个。这使您更容易受到由于类更改而导致串行版本UID不匹配的问题的影响。)


  如果我的班级没有实现Serialiazble接口,为什么这么说呢?


不,不是说。


  我该怎么做才能清楚解决此问题。我不想修改或向我的代码添加任何内容。


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


如果您不想更改任何代码,请修改IDE的编译器设置以禁用此警告。
添加serialVersionUID字段;例如使用IDE的加速器,这应该为您提供使用标准算法进行计算的选项。
添加适当的@SuppressWarning批注。如果将来需要将异常对象序列化的可能性为零,则这将是适当的。

关于java - 为什么收到消息:“可序列化的类Input Exception没有声明类型为long的静态最终串行Verison UID字段”?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14815350/

10-10 16:04