我想处理变量并设置消息,但这是不可能的,因为我只允许在第一行调用超级构造函数。是否有办法让我可以设置异常消息而不调用超级构造函数。
答案 0 :(得分:1)
你不是总是强迫调用súper构造函数,如果你这样做,就必须在第一行。
在这种情况下,使用在构造函数之前运行的init块。
答案 1 :(得分:0)
异常的消息部分是不可变的,只能在构造消息时设置它。异常的目的是捕获错误的快照或超出事件的标准。不仅Exception捕获消息(不可变),还捕获其他信息,例如stacktrace(mutable)。但是,您可以创建自己的Exception类,该类覆盖getMessage(),contructor和setMessage()以自行存储消息。
public class ServiceException extends RuntimeException {
private static final long serialVersionUID = 1L;
private String msg;
public ServiceException() {
}
public ServiceException(String msg) {
super(msg);
this.msg = msg;
}
public ServiceException(Throwable ex) {
super(ex);
this.msg = ex.getMessage();
}
public ServiceException(String msg, Throwable ex) {
super(msg, ex);
this.msg = msg;
}
@Override
public String getMessage() {
return msg;
}
public void setMessage(String msg) {
this.msg = msg;
}
}
答案 2 :(得分:0)
要遵循的步骤:
创建一个单独的类,首先处理变量并创建自定义消息
最后将处理过的消息传递给自定义异常类
此过程将使对象更强内聚。
示例代码:
public class MyException extends Exception{
public MyException(String message){
super(MessageProcesser.processMessage(message));
}
}
public class MessageProcesser{
public static String processMessage(String message){
// return processed message
}
}