可以包装异常吗?

时间:2018-09-11 10:39:17

标签: java exception exception-handling

我有一个异常'OrekitException',我想将其包装到我自己的Exception类中。

我该怎么办?

例如在我的一种方法中:

private void configureOrekit() throws OrekitException{
    try {
       method logic...
} catch (OrekitException oe) {
    System.out.println(OrekitException oe);
    log.error(oe.getMessage());
}

我自己的异常类:

public class MyException extends Exception {

       public MyException ( String message )
        {
            super( message );
        }
}

如何将OrekitException合并到MyException中,以便无论何时抛出它,都超出MyException类的范围?

2 个答案:

答案 0 :(得分:1)

提供一个构造函数,该构造函数也接受要包装的异常:

public class MyException extends Exception {

       public MyException (String message, OrekitException exception){
            super(message, exception);
        }
}

或包装任何异常,请对参数使用更广泛的类型:

public MyException (String message, Exception exception){
    super(message, exception);
}

您可以将其用作:

private void configureOrekit() throws MyException{
    try {
       method logic...
} catch (OrekitException oe) {
   throw new MyException("message useful...", oe);       
}

请注意,System.out.println()并不是跟踪异常的一种方法,并且记录异常 ,然后将其包装在另一个抛出的异常中,因为您仍然可以将其记录在任何层,在日志文件中找到一些重复的错误日志都会使事情变得一目了然... 通常,记录或抛出/传播异常:不能同时记录和抛出异常。

答案 1 :(得分:0)

例外允许您指定cause。您可以在构造函数中找到原因,并将其传递给Exception的构造函数:

public class MyException extends Exception {

      public MyException (String message, Exception cause){
           super(message, cause);
      }
}

然后您的方法可以抛出MyException

private void configureOrekit() throws MyException{
    try {
        method logic...
    } catch (OrekitException oe) {
        System.out.println(OrekitException oe);
        log.error(oe.getMessage());

        throw new MyException("", oe);
    }
}

这允许来自您的MyException对象的堆栈跟踪使caused by...显示原始OrekitException的详细信息/跟踪