从变量中抛出异常

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从变量中抛出异常相关的知识,希望对你有一定的参考价值。

使用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的类。

答案

你可以简单地抓住Exception抛出的someMethod(),然后用你想要的信息重新抛出它。

就像是,

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);
}
另一答案

而不是捕捉Throwable(这几乎总是一个错误),你可以创建一个自定义的RuntimeException并包装你捕获的异常。

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

以上是关于从变量中抛出异常的主要内容,如果未能解决你的问题,请参考以下文章

在 PHP Try Catch 块中抛出异常

如何捕获ctypes中抛出的异常?

java中 方法中抛出异常处理方法

在PHP Try Catch块中抛出异常

忽略在 C# .NET 中抛出的特定异常

使用 Mockito 从模拟中抛出已检查的异常