Since I can in Java 8 now parameterize constructors as functions, I can write a generic exception copier:
<E extends Throwable> E copy(final Throwable from, final Function<String, E> ctor) { final E to = ctor.apply(from.getMessage()); to.setStackTrace(from.getStackTrace()); for (final Throwable s : from.getSuppressed()) to.addSuppressed(s); return to; }
Example:
try { // Something throws } catch (final AnException | BeException | KatException e) { throw copy(e, IOException::new); }
This is not a common strategy but one I sometimes use to reduce the incredible size of layered exceptions, especially for logging. It is also handy for shoehorning 3rd-party exceptions into a common framework exception, a nice feature for APIs to simplify calling code. Copy
helps reduce boilerplate code.
No comments:
Post a Comment