繁体   English   中英

可以使用Exception.getCause()来了解链接的Exception吗?

[英]Can Exception.getCause() be used to know the chained Exception?

我的代码如下所示:

    SQLException sqlExc;
    //resX is obtained from the method signature and it's a ResourceException
    Exception linkedExc = resX.getLinkedException();
    // if linkedExc exception is a SQL Exception, assign it to sqlExc
    if (linkedExc instanceof SQLException) {
        sqlExc = (SQLException) linkedExc;
    }

会改变

Exception linkedX = resX.getLinkedException();

Exception linkedX = new Exception(resX.getCause());

给出相同的结果? 还是Exception类型不会保留在新创建的异常中?

如果不是,最好的方法是什么?

这是一个已有15年历史的代码,这就是为什么它使用不推荐使用的方法的原因。 我正在尝试解决此问题。

答案是肯定的。 下面的代码证明了这一点。 您可以按此处或按其编写的方式使用它。 两者都应通过if语句。

import java.sql.SQLException;
import javax.resource.ResourceException;   

public class Linking {

    public static void main(String[] args) {

        SQLException resW = new SQLException("blubb");
        ResourceException resX = new ResourceException("a message", resW);
        SQLException sqlExc = null;
        Throwable linkedExc = resX.getCause();

        // if linkedExc exception is a SQL Exception, assign it to sqlExc
        if (linkedExc instanceof SQLException) {
            sqlExc = (SQLException) linkedExc;
        }           
        if (sqlExc != null)
            sqlExc.printStackTrace();
    }    
}

关于ResourceException的文档( http://docs.oracle.com/javaee/1.4/api/javax/resource/ResourceException.html#setLinkedException%28java.lang.Exception%29 )说:

已过时。 J2SE版本1.4支持链式异常功能,该功能允许任何throwable知道导致其被抛出的另一个throwable(如果有)。 请参阅java.lang.Throwable类的getCause和initCause方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM