2012-02-21 77 views
0

Im'尝试编写一个从Exception派生的类BrokenObjectException类。 但在Eclipse中我得到这个错误:无法从异常继承

的序列化类BrokenObjectException没有声明型长

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

我不明白为什么它要求我声明场的静态最后的serialVersionUID领域。 不应该只是强制声明一些方法的接口? 无论如何,我想是因为我想抓住它娜我如何捕获所有异常不同的方式来将这个类,从我的例子,我有一个块:

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.Is那可能吗? 以及如何解决我收到的错误?

回答

2

这不是一个错误,而只是一个警告。使用时只需将@SuppressWarnings("serial")注释略高于类声明:

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

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

2

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

此外,如果你想不理它,你可以使用

@SuppressWarnings("serial") 

。但是,我会建议继续并生成它。有关为什么要检查此堆栈溢出文章的更多信息。 What is a serialVersionUID and why should I use it?

1

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