链式异常initCause(),这是正确的吗?

时间:2013-11-04 17:05:10

标签: java

我有一个方法:

public void SomeDataMethod() throws BadDataException {
try {

// do something
} catch(IOException e) {
    throw new BadDataException("Bad data",e);
} finally {
  // do something regardless of above
}

}

现在例如一些代码将调用此方法,我想看到此方法中发生的所有失败,

所以如何使用initCause()来实现? 或者可能还有其他办法吗?如果我使用initCause():

1)我会得到所有被捕获的异常或最后一个吗?

2)我得到什么形式/它?**

2 个答案:

答案 0 :(得分:0)

当您使用附加的throwable调用Excepion构造函数时,就像e作为new BadDataException("Bad data",e);的一部分一样,结果实际上与以下内容相同:

BadDataException bde = new BadDataException("Bad data");
bde.initCause(e);

这是为了保持与没有initCause概念的早期Java版本的兼容性。

并非所有异常都支持将原因添加为构造函数的一部分,对于这些异常,您可以initCause

请注意,您只能initCause一次例外,并使用' null'进行初始化。以后不能改变:

BadDataException bde = new BadDataException("Bad data", null);
// this will fail.....
bde.initCause(e);

答案 1 :(得分:0)

要获得异常原因,请致电... getCause()。在这种情况下,此方法将返回您在BadDataException中包装的IOException。它不能返回多一个异常,因为你只能包装一个异常。

相关问题