java: 重新抛出被困异常

java: rethrowing trapped exception

我想捕获 SQLException,发送一些邮件,然后将异常发送到下一个目标。我已经class编辑如下:

class myexception extends SQLException {
    public myexception( Throwable cause ) throws SQLException {
        super( cause );

        ... send mail ...

        throw new SQLException( cause );
    }
}

如果我包装了一个抛出 SQLException('connect()' 或类似)的现有函数:

public void somecall() throws myexception {
   try {
      ... SQL call ...
   } catch( SQLException sqlException ) {
       throw new myexception( sqlException );
   }
}

我可以重新抛出 原来的 SQLException 还是我需要解压它并创建一个新的?当我调用 throw new SQLException( cause );

时,IE 是否会生成运行时错误?

我不明白为什么这不可能,但您需要捕获 SQLException:

try{
    try{
        someCall();
    }
    catch(myException e) {

    }
}
catch(SQLException e) {
    // catches the thrown SQLException 
    //created by new myException(Throwable clause)
}

在我看来,Exception不应该用来实现业务或者框架逻辑(比如"send an e-mail when I get created")

应该使用实际框架本身来执行此操作。

例如,如果您在控制反转 (IoC) 容器(例如 spring 中管理所有软件组件,并且您想要执行 "something"(例如发送电子邮件邮件)每次抛出特定异常时,您都可以使用面向方面的编程技术。

使用此类声明性构造,您可以针对某些方法并拦截抛出 SQLException 的情况,然后执行您的逻辑。

在发送电子邮件的情况下,我会亲自创建一个队列或类似的东西,以便在发送电子邮件时不会阻止我的主要代码的执行

有一种更简洁的方法来完成您正在尝试的事情。

try {
    sqlCall();
} catch (SQLExcetion e) {
    sendMail();

    throw e;
}

您不需要继承 SQLException