有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java从变量引发异常

使用java,我想做如下事情

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

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

我可以通过Class<? extends Throwable> cls = x.getClass();来获取类类型,但我不确定语法。我做不到 athrow new cls("Comment " + x.getMessage());我确信当您不知道抛出的可丢弃对象的类时,一定有一种相当简单的方法来实现这一点


共 (2) 个答案

  1. # 1 楼答案

    您只需捕获someMethod()抛出的Exception,然后用您想要的消息重新抛出它

    大概

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

    如果需要,还可以创建并抛出选中的异常,如下所示

    自定义异常类:

    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);
    }
    
  2. # 2 楼答案

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

    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);
    }