如何在不设置java中的超级构造函数的情况下将消息设置为自定义异常类

时间:2014-03-06 06:12:03

标签: java constructor

我想处理变量并设置消息,但这是不可能的,因为我只允许在第一行调用超级构造函数。是否有办法让我可以设置异常消息而不调用超级构造函数。

3 个答案:

答案 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
    }
}