我正在尝试编写从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/