2011-07-09 18 views
4

我有一段代碼可以拋出三種不同類型的異常。其中兩個例外以特定方式處理,而第三個以另一種方式處理。以這種方式切割和粘貼有沒有好的習慣用語?如何管理具有相同行爲的捕獲

我想要做的是:

try { anObject.dangerousMethod(); } 
catch {AException OR BException e) { /*do something*/ } 
catch {CException e) { /*do something else*/ } 

回答

2

的Java 6不支持指定catch塊這樣。最好的辦法是爲這兩種異常類型定義一個超類/接口,並捕獲超類/接口。另一個簡單的解決方案是擁有一個包含處理這兩個異常的邏輯的方法,並在兩個catch塊中調用該方法。

3

正如您現在可以使用的新Java 7規範所定義的那樣。

try { anObject.dangerousMethod(); } 
catch {AException | BException e) { /*do something*/ } 
catch {CException e) { /*do something else*/ } 
4

in JDK 7,但在早期的Java版本中沒有。在JDK 7的代碼看起來是這樣的:

try { anObject.dangerousMethod(); } 
catch {AException | BException e) { /*do something*/ } 
catch {CException e) { /*do something else*/ } 
0

如何定義自定義異常(比方說DException)擴展都AExceptionBException,然後在你的代碼中使用它:

try { anObject.dangerousMethod(); } 
catch {DException e) { /*do something*/ } 
catch {CException e) { /*do something else*/ } 
+0

犯錯,我想你的意思是「AException」和「BException」擴展的'DException'。 –

+0

@Sanjay是的,你是對的 –

相關問題