public class ExceptionUtils extends Object
Provides utilities for manipulating and examining
Throwable
objects.
Constructor and Description |
---|
ExceptionUtils() |
Modifier and Type | Method and Description |
---|---|
static <R> R |
rethrow(Throwable throwable)
Throw a checked exception without adding the exception to the throws
clause of the calling method.
|
public static <R> R rethrow(Throwable throwable)
The use of this technique may be controversial, but exceedingly useful to
library developers.
public int propagateExample { // note that there is no throws clause
try {
return invocation(); // throws IOException
} catch (Exception e) {
return ExceptionUtils.rethrow(e); // propagates a checked exception
}
}
This is an alternative to the more conservative approach of wrapping the
checked exception in a RuntimeException:
public int wrapExample { // note that there is no throws clause
try {
return invocation(); // throws IOException
} catch (Error e) {
throw e;
} catch (RuntimeException e) {
throw e; // wraps a checked exception
} catch (Exception e) {
throw new UndeclaredThrowableException(e); // wraps a checked exception
}
}
One downside to using this approach is that the java compiler will not allow invoking code to specify a checked exception in a catch clause unless there is some code path within the try block that has invoked a method declared with that checked exception. If the invoking site wishes to catch the shaded checked exception, it must either invoke the shaded code through a method re-declaring the desired checked exception, or catch Exception and use the instanceof operator. Either of these techniques are required when interacting with non-java jvm code such as Jyton, Scala, or Groovy, since these languages do not consider any exceptions as checked.
throwable
- The throwable to rethrow.throwable
#wrapAndThrow(Throwable)}
Copyright © 2021. All rights reserved.