例外包装可能吗? [关闭]

问题描述 投票:0回答:2

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

我怎么能这样做?

例如在我的一个方法中:

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

我自己的Exception类:

public class MyException extends Exception {

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

我怎样才能在MyException中加入OrekitException,所以每当抛出它时,它都不在MyException类中?

java exception exception-handling
2个回答
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()不是一种跟踪异常的方法,并且记录异常,然后将其包装在另外的异常中,因为您仍然可以在任何层上记录异常,这会让事情变得不明确日志文件中的重复错误日志...通常,记录或抛出/传播异常:不是两者都有。


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的详细信息/跟踪

© www.soinside.com 2019 - 2024. All rights reserved.