从变量抛出异常

时间:2018-10-08 19:45:47

标签: java exception

使用Java,我想做类似的事情

try {
  someMethod();
} catch (Throwable x) {
  x.setMessage("Some comment " + x.getMessage());
  throw x;
}

也就是说,我不知道会抛出什么“ someMethod”。无论是什么,我都想在其消息的开头添加一条消息,然后抛出错误。但是Throwable没有setMessage()方法。

我可以执行Class<? extends Throwable> cls = x.getClass();来获取类类型,但是我不确定语法。我做不到 throw new cls("Comment " + x.getMessage());我确信,当您不知道所抛出的throwable的类时,肯定会有一种相当简单的方法。

2 个答案:

答案 0 :(得分:2)

您可以创建自定义Throwable并在其中包装捕获到的异常,而不是捕获RuntimeException(几乎总是/ em>错误)。

public class MyException extends RuntimeException {
    public MyException(String message, Throwable cause) {
        super(message, cause);
    }
}

try {
    someMethod();
} catch(Exception e) {
    throw new MyException("A major error has occurred!", e);
}

答案 1 :(得分:0)

您可以简单地捕获Exception抛出的someMethod(),然后将其与所需的消息一起重新抛出。

类似

try {
   someMethod();
} catch(Exception ex) {
   /* Optional: Log Error */
   Logger.error(..., ex);
   throw new Exception("Error Occurred While Processing Request.", ex);
}

如果需要,您还可以如下创建并引发一个检查异常,

CustomException类:

public class CustomException extends Exception {
    /* Optional: Add Serial UID */

    public CustomException(String message, Throwable cause) {
        super(message, cause);
    }

    public CustomException(Throwable cause) {
        super(cause);
    }
}

代码:

try {
   someMethod();
} catch(Exception ex) {
   /* Optional: Log Error */
   Logger.error(..., ex);
   throw new CustomException("Error Occurred While Processing Request.", ex);
}