【问题标题】:Cannot inherit from Exception不能从异常继承
【发布时间】:2012-03-12 01:01:42
【问题描述】:

我正在尝试编写一个派生自 Exception 的类 BrokenObjectException 类。 但是在 Eclipse 中我得到了这个错误:

可序列化类 BrokenObjectException 没有声明 long 类型的静态最终 serialVersionUID 字段

public class BrokenObjectException extends Exception
{
    BrokenObject(String message)
    {
        ;
    }
}

我不明白为什么它要求我声明一个字段。 接口不应该只强制声明一些方法吗? 无论如何,我想要这个类,因为我想以与捕获所有异常的方式不同的方式来捕获它,例如,我有一个块:

try
{
    if(...)
        throw new Exception("wrong");
    if(...)
        throw new BrokenObjectException("wrong");
}
catch(BrokenObjectException e)
{
    // do something (action1)
    throw e;
}
catch(Exception e)
{
    // so something (action2)
    throw e;
}

所以在第一个 catch 块中,我写了“做某事”。 这是因为根据抛出的异常类型,我想做不同的操作。 因此,由于 BrokenObjectException 是从 Exception 派生的,它应该被捕获两次。 但是如果抛出了 BrokenObjectException,我想做 action1 和 action2,如果只是抛出一个普通的异常,我只想做 action2。这可能吗? 以及如何解决我遇到的错误?

【问题讨论】:

    标签: java exception


    【解决方案1】:

    您知道为什么需要该 serialVersionUID 字段吗?那是你要求的吗?如果有请看下面link

    【讨论】:

      【解决方案2】:

      这不是错误,而只是警告。只需在类声明上方使用@SuppressWarnings("serial") 注释即可:

      @SuppressWarnings("serial")
      public class BrokenObjectException extends Exception
      {
          BrokenObject(String message)
          {
              ;
          }
      }
      

      您正在扩展一个实现 Serializable 接口的类,因此如果您不完全遵守其约定,编译器会警告您。要解决这个问题(因为我怀疑您是否想要序列化此类的对象),只需使用上面的注释即可。

      【讨论】:

        【解决方案3】:

        我相信您可以突出显示 eclipse 给您的错误文本,然后告诉它生成串行版本 UUID。之后,它应该可以按照您的意愿工作。

        你也可以使用

        @SuppressWarnings("serial")
        

        如果你想忽略它。但是,我建议继续生成它。有关为什么查看此堆栈溢出帖子的更多信息。 What is a serialVersionUID and why should I use it?

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-02-01
          • 2016-03-20
          • 1970-01-01
          • 2016-05-28
          • 2014-03-11
          • 1970-01-01
          • 2012-07-14
          • 1970-01-01
          相关资源
          最近更新 更多