[英]How can I set the message on an exception in Java?
我想設置自定義異常消息。 但是,我不確定如何做到這一點。 我需要創建一個自定義異常類還是有更簡單的方法?
大多數標准異常類都提供了一個接受消息的構造函數,例如:
public UnsupportedOperationException(String message) {
super(message);
}
上面的類只是簡單地調用了它的父類的構造函數,它又調用了它的父類的構造函數,以此類推,最終達到:
public Throwable(String message) {
...
}
如果您創建自己的異常類,我認為遵循此約定是個好主意。
您只能在創建異常時設置消息。 這是一個示例,如果您想在創建后設置它。
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;
}
}
好吧,如果 API 提供了適合您需要的異常(例如 IllegalArgumentException),只需使用它並在構造函數中傳遞您的消息。
最好的方法是包裝異常。
try {
my code that throws E;
} catch (final E e) {
throw new MyE("my message", e);
}
Exception 類(它的父類,實際上是 Throwable)在其構造函數中將消息作為參數:
throw new Exception("message")
或Exception("message", innerException);
根Exception
類接受String
自定義消息,就像(據我所知)所有派生類一樣。
所以:不,您不需要創建自定義類。 現有的例外之一可能涵蓋了您的案例(閱讀他們的描述以找出哪個)。 如果這些都不是真正令人滿意的,那么您可以創建Exception
的擴展(或RuntimeException
等)並維護自定義消息構造函數。
試試這個代碼:
try{
throw new Exception("Test String");
}
catch(Exception ex){
System.out.println(ex.getMessage());
}
另一種變體
public class MyCustomExceptionWithoutMessageInConstructor extends IllegalArgumentException {
private static final String ERROR_MESSAGE = "terrible error";
public MyCustomExceptionWithoutMessageInConstructor() {
super(ERROR_MESSAGE);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.