Ernusc
Ernusc

Reputation: 526

Chained Exceptions initCause(), is this correct?

I have a method:

public void SomeDataMethod() throws BadDataException {
try {

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

}

And now for example some code will invoke this method, and I want to see all failures which happened in this method,

so how can I do it by using initCause()? Or maybe is there any other way to do this? And if I use initCause():

1) will I get all exceptions which were catch or the last one?

2) and What form do I get them / it?**

Upvotes: 1

Views: 541

Answers (2)

JB Nizet
JB Nizet

Reputation: 691715

To get the cause of an exception, you call... getCause(). In this case, this method will return the IOException that you wrapped inside your BadDataException. It can't return more that one exception, since you can only wrap one exception.

Upvotes: 0

rolfl
rolfl

Reputation: 17707

When you call an Excepion Constructor with the throwable attached, like you have the e as part of the new BadDataException("Bad data",e); then the result is effectively the same as:

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

This is to keep compatibility with earlier Java versions which did not have the initCause concept.

Not all exceptions support adding the cause as part of the constructor, and for those exceptions you can initCause it.

note that you can only initCause an exception once, and initializing it with 'null' cannot later be changed:

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

Upvotes: 1

Related Questions