Is there a better way to throw this exception? (original) (raw)

Steven Schlansker stevenschlansker at gmail.com
Thu Jun 6 15:35:56 UTC 2013


On Jun 6, 2013, at 2:42 AM, Weijun Wang <weijun.wang at oracle.com> wrote:

Hi All

I have a method that could throw two kinds of checked exceptions and possibly other unchecked ones: void once() throws One, Two Now I have a wrapper method that calls once() for multiple times, and want to throw the first exception if all fails. Now it looks like void multiple() throws One, Two { Exception saved = null; for (all chances) { try { once(); return; } catch (Exception e) { if (saved != null) saved = e; } } if (saved instanceof One) { throw (One)saved; } else if (saved instanceof One) { throw (Two)saved; } else if (saved instanceof RuntimeException) { throw (RuntimeException)saved; } else { // Not likely, but I've already wrote so many lines. throw new RuntimeException(saved); } } Is there any way I can make it shorter?

If you use / are willing to use Guava, you can replace all of the exception if clauses with:

void multiple() throws One, Two { for (…) { … } Throwables.propagateIfPossible(saved, One.class, Two.class); throw Throwables.propagate(saved); }

http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/base/Throwables.html#propagateIfPossible(java.lang.Throwable,%20java.lang.Class,%20java.lang.Class)



More information about the core-libs-dev mailing list