我想设置自定义异常消息但是我不确定如何执行此操作。我是否需要创建自定义异常类,或者是否有更简单的方法来执行此操作?
如果这是一个简单的问题,请提前抱歉,但我一直在网上搜索并且运气不佳。
答案 0 :(得分:26)
大多数标准异常类都提供了一个带消息的构造函数,例如:
public UnsupportedOperationException(String message) {
super(message);
}
上面的类只是调用其父的构造函数,该构造函数调用其父构造函数,依此类推,最终达到:
public Throwable(String message) {
...
}
如果您创建自己的异常类,我认为遵循此约定是个好主意。
答案 1 :(得分:11)
好吧,如果API提供了一个适合您需求的异常(例如IllegalArgumentException),只需使用它并在构造函数中传递消息。
答案 2 :(得分:10)
您只能在创建例外时设置消息。如果您想在创建后设置它,这是一个示例。
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;
}
}
答案 3 :(得分:2)
最好的方法是包装异常。
try {
my code that throws E;
} catch (final E e) {
throw new MyE("my message", e);
}
答案 4 :(得分:2)
根Exception
类接受String
自定义消息,并且(据我所知)所有派生类。
所以:不,你不需要创建自定义类。现有的例外情况之一可能包括您的情况(阅读他们的描述以找出哪些)。如果这些都不是真的令人满意,那么您可以创建Exception
(或RuntimeException
等)的扩展名并维护自定义消息构造函数。
答案 5 :(得分:1)
Exception类(其父级,实际上是Throwable)在其构造函数中将消息作为参数
抛出新的异常(“message”)/ Exception(“message”,innerException);
答案 6 :(得分:0)
试试此代码
try{
throw new Exception("Bad String");
}catch(Exception ex){
System.out.println(ex.getMessage());
}