我的代码如下:
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年的代码,这就是它使用弃用方法的原因。我正在努力解决这个问题。
答案 0 :(得分:1)
答案是肯定的。以下代码证明了这一点。您可以在此处或在编写时使用它。两者都应该通过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,如果有的话, 这导致它被抛出。请参阅 getCause 和initCause方法 java.lang.Throwable类。