我正在尝试编写从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,如果仅抛出普通的Exception,我想执行action2,这样可能吗?
以及如何解决我遇到的错误?

最佳答案

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

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


发生的事情是您正在扩展实现Serializable接口的类,因此,如果您不完全遵守其约定,则编译器将向您发出警告。为了解决这个问题(因为我怀疑您要序列化此类的对象),只需使用上面的注释。

关于java - 无法从Exception继承,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9382293/

10-08 22:01