2013-11-26 12 views
0

我有一個要求趕上RunTimeException。投擲前更改異常原因消息?

catch (RuntimeException ex) { 

//here i can get message using ex.getMessage(); 
} 

在這裏,我可以得到使用ex.getMessage()異常消息。但我不希望這個消息被返回給客戶。我必須改變這個消息並返回。 但是沒有setter方法來改變消息。 是否可以更改運行時異常消息?

謝謝!

+2

問:是否有可能改變的......異常的消息?答:當然可以:1)抓住原始異常,2)創建並拋出一個新的,不同的例外。 – paulsm4

+0

使用具有良好含義的消息創建自定義異常並將它們返回給客戶端 –

+0

無法更改ex的消息並返回相同的消息而不是拋出新的運行時異常?因爲如果我拋出新的運行時異常,那麼我鬆散的堆棧跟蹤。謝謝! – user755806

回答

1

是的,這是可能的。拋出新的RuntimeException傳遞您的自定義消息。

使用構造public RuntimeException(String message, Throwable cause)

構造帶指定詳細消息和原因的新的運行時異常。

catch (RuntimeException ex) { 

     throw new RuntimeException("Custome message", ex); 

    } 
+0

Suresh,我不能改變ex的消息並返回相同的值而不是拋出新的運行時異常嗎?謝謝! – user755806

+0

不,你不能設置消息。 –

+0

然後,我鬆開了我的原始堆棧跟蹤權利? – user755806

3

你可以創建你自己的自定義異常,當運行時異常發生時,你可以用適當的消息拋出你的自定義異常。

public class MyException extends Exception { 
    public MyException(String message) { 
     super(message); 
    } 
} 
0
catch (RuntimeException ex) { 

    throw new SomeNewException(<Your message>); 
} 

catch (RuntimeException ex) { 

    throw new RuntimeException(<Your message>); 
} 

public class SomeNewException extends Exception { 
    public SomeNewException(String message) { 
     super(message); 
    } 
….. 
….. 
….. 
} 


+0

我不能更改ex的消息並返回相同的值,而不是拋出新的運行時異常?因爲如果我拋出新的運行時異常,那麼我鬆散的堆棧跟蹤。謝謝! – user755806

3
catch (RuntimeException ex) 
{ 
    //here i can get message using ex.getMessage(); 
    throw new RuntimeException("bla bla"); 
} 

如果你想保持有關第一個例外的原始位置的信息使用此:

catch (RuntimeException ex) 
{ 
    //here i can get message using ex.getMessage(); 
    throw new RuntimeException("bla bla", ex); 
} 
0

做這樣

catch (RuntimeException ex) {  
     throw new RuntimeException("your message here"); 
} 
1
catch (RuntimeException ex) 
{ 
    //here i can get message using ex.getMessage(); 
    throw new RuntimeException("Your message here."); 
}