我想設置一個自定義異常消息,但我不確定如何做到這一點。我需要創建一個自定義的異常類還是有更簡單的方法來做到這一點?如何在JAVA中設置異常消息?
對不起,如果這是一個簡單的問題,但我一直在網上尋找,並沒有太多的運氣。
我想設置一個自定義異常消息,但我不確定如何做到這一點。我需要創建一個自定義的異常類還是有更簡單的方法來做到這一點?如何在JAVA中設置異常消息?
對不起,如果這是一個簡單的問題,但我一直在網上尋找,並沒有太多的運氣。
那麼,如果API提供了一個適合您需要的異常(例如IllegalArgumentException),那就使用它並在構造函數中傳遞消息。
大多數標準的異常類提供一個構造函數一個mesage,例如:
public UnsupportedOperationException(String message) {
super(message);
}
上面的類簡單地調用它的父類的構造,它調用它的父類的構造,等等,在最終達到高潮:
public Throwable(String message) {
...
}
如果你創建你自己的異常類,我認爲遵循這個約定是個好主意。
最好的方法是包裝異常。
try {
my code that throws E;
} catch (final E e) {
throw new MyE("my message", e);
}
Exception類(其母公司,實際上 - Throwable的)需要一個消息作爲一個參數在其構造
擲新的異常( 「消息」)/異常( 「信息」,的InnerException);
根Exception
類接受一個String
自定義消息,就像我可以告訴的那樣(所有派生類)。
所以:不,你不需要創建一個自定義類。現有的一個例外情況可能涵蓋您的案例(請閱讀他們的描述以瞭解具體情況)。如果這些都不是真的令人滿意,那麼您可以創建Exception
(或RuntimeException
等)的擴展並維護自定義消息構造函數。
您只能在創建例外時設置消息。這是一個例子,如果你想在創建後設置它。
public class BusinessException extends RuntimeException{
private Collection<String> messages;
public BusinessException(String msg){
super(msg);
}
public BusinessException(String msg, Exception cause){
super(msg, cause);
}
public BusinessException(Collection<String> messages){
super();
this.messages= messages;
}
public BusinessException (Collection<String> messages, Exception cause){
super(cause);
this.messages= messages;
}
@Override
public String getMessage(){
String msg;
if(this.messages!=null && !this.messages.isEmpty()){
msg="[";
for(String message : this.messages){
msg+=message+",";
}
msg= StringUtils.removeEnd(msg, ",")+"]";
}else msg= super.getMessage();
return msg;
}
}
試試這個代碼
try{
throw new Exception("Bad String");
}catch(Exception ex){
System.out.println(ex.getMessage());
}
即使java.lang.Exception的(http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Exception.html )有一個帶String的構造函數。 – anubhava 2012-01-17 13:10:24