无法继承Exception

时间:2012-02-21 17:35:11

标签: java exception

我'试图编写一个派生自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,如果只抛出一个普通的异常,我只想做动作。那可能吗? 以及如何解决我得到的错误?

3 个答案:

答案 0 :(得分:2)

我相信您可以突出显示eclipse提供给您的错误文本,然后告诉它生成串行版本UUID。在那之后,它应该按照你想要的方式工作。

您也可以使用

@SuppressWarnings("serial")

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

答案 1 :(得分:2)

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

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

正在发生的是你正在扩展一个实现Serializable接口的类,因此如果你没有完全遵守它的合同,编译器会发出警告。为了解决这个问题(因为我怀疑你是否想要序列化这个类的对象),只需使用上面的注释。

答案 2 :(得分:1)

您知道为什么需要serialVersionUID字段吗?那是你要的吗?如果是这样,请查看以下link