2012-02-21 113 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