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