Package com.google.common.base
Class Throwables
- java.lang.Object
-
- com.google.common.base.Throwables
-
public final class Throwables extends Object
Static utility methods pertaining to instances ofThrowable.See the Guava User Guide entry on Throwables.
- Since:
- 1.0
-
-
Method Summary
All Methods Static Methods Concrete Methods Modifier and Type Method Description static List<Throwable>getCausalChain(Throwable throwable)Gets aThrowablecause chain as a list.static ThrowablegetRootCause(Throwable throwable)Returns the innermost cause ofthrowable.static StringgetStackTraceAsString(Throwable throwable)Returns a string containing the result oftoString(), followed by the full, recursive stack trace ofthrowable.static RuntimeExceptionpropagate(Throwable throwable)Propagatesthrowableas-is if it is an instance ofRuntimeExceptionorError, or else as a last resort, wraps it in aRuntimeExceptionthen propagates.static <X extends Throwable>
voidpropagateIfInstanceOf(Throwable throwable, Class<X> declaredType)Propagatesthrowableexactly as-is, if and only if it is an instance ofdeclaredType.static voidpropagateIfPossible(Throwable throwable)static <X extends Throwable>
voidpropagateIfPossible(Throwable throwable, Class<X> declaredType)Propagatesthrowableexactly as-is, if and only if it is an instance ofRuntimeException,Error, ordeclaredType.static <X1 extends Throwable,X2 extends Throwable>
voidpropagateIfPossible(Throwable throwable, Class<X1> declaredType1, Class<X2> declaredType2)Propagatesthrowableexactly as-is, if and only if it is an instance ofRuntimeException,Error,declaredType1, ordeclaredType2.
-
-
-
Method Detail
-
propagateIfInstanceOf
public static <X extends Throwable> void propagateIfInstanceOf(@Nullable Throwable throwable, Class<X> declaredType) throws X extends Throwable
Propagatesthrowableexactly as-is, if and only if it is an instance ofdeclaredType. Example usage:try { someMethodThatCouldThrowAnything(); } catch (IKnowWhatToDoWithThisException e) { handle(e); } catch (Throwable t) { Throwables.propagateIfInstanceOf(t, IOException.class); Throwables.propagateIfInstanceOf(t, SQLException.class); throw Throwables.propagate(t); }- Throws:
X extends Throwable
-
propagateIfPossible
public static void propagateIfPossible(@Nullable Throwable throwable)
Propagatesthrowableexactly as-is, if and only if it is an instance ofRuntimeExceptionorError. Example usage:try { someMethodThatCouldThrowAnything(); } catch (IKnowWhatToDoWithThisException e) { handle(e); } catch (Throwable t) { Throwables.propagateIfPossible(t); throw new RuntimeException("unexpected", t); }
-
propagateIfPossible
public static <X extends Throwable> void propagateIfPossible(@Nullable Throwable throwable, Class<X> declaredType) throws X extends Throwable
Propagatesthrowableexactly as-is, if and only if it is an instance ofRuntimeException,Error, ordeclaredType. Example usage:try { someMethodThatCouldThrowAnything(); } catch (IKnowWhatToDoWithThisException e) { handle(e); } catch (Throwable t) { Throwables.propagateIfPossible(t, OtherException.class); throw new RuntimeException("unexpected", t); }- Parameters:
throwable- the Throwable to possibly propagatedeclaredType- the single checked exception type declared by the calling method- Throws:
X extends Throwable
-
propagateIfPossible
public static <X1 extends Throwable,X2 extends Throwable> void propagateIfPossible(@Nullable Throwable throwable, Class<X1> declaredType1, Class<X2> declaredType2) throws X1 extends Throwable, X2 extends Throwable
Propagatesthrowableexactly as-is, if and only if it is an instance ofRuntimeException,Error,declaredType1, ordeclaredType2. In the unlikely case that you have three or more declared checked exception types, you can handle them all by invoking these methods repeatedly. See usage example inpropagateIfPossible(Throwable, Class).- Parameters:
throwable- the Throwable to possibly propagatedeclaredType1- any checked exception type declared by the calling methoddeclaredType2- any other checked exception type declared by the calling method- Throws:
X1 extends Throwable
-
propagate
public static RuntimeException propagate(Throwable throwable)
Propagatesthrowableas-is if it is an instance ofRuntimeExceptionorError, or else as a last resort, wraps it in aRuntimeExceptionthen propagates.This method always throws an exception. The
RuntimeExceptionreturn type is only for client code to make Java type system happy in case a return value is required by the enclosing method. Example usage:T doSomething() { try { return someMethodThatCouldThrowAnything(); } catch (IKnowWhatToDoWithThisException e) { return handle(e); } catch (Throwable t) { throw Throwables.propagate(t); } }- Parameters:
throwable- the Throwable to propagate- Returns:
- nothing will ever be returned; this return type is only for your convenience, as illustrated in the example above
-
getRootCause
public static Throwable getRootCause(Throwable throwable)
Returns the innermost cause ofthrowable. The first throwable in a chain provides context from when the error or exception was initially detected. Example usage:assertEquals("Unable to assign a customer id", Throwables.getRootCause(e).getMessage());
-
getCausalChain
@Beta public static List<Throwable> getCausalChain(Throwable throwable)
Gets aThrowablecause chain as a list. The first entry in the list will bethrowablefollowed by its cause hierarchy. Note that this is a snapshot of the cause chain and will not reflect any subsequent changes to the cause chain.Here's an example of how it can be used to find specific types of exceptions in the cause chain:
Iterables.filter(Throwables.getCausalChain(e), IOException.class));
- Parameters:
throwable- the non-nullThrowableto extract causes from- Returns:
- an unmodifiable list containing the cause chain starting with
throwable
-
getStackTraceAsString
public static String getStackTraceAsString(Throwable throwable)
Returns a string containing the result oftoString(), followed by the full, recursive stack trace ofthrowable. Note that you probably should not be parsing the resulting string; if you need programmatic access to the stack frames, you can callThrowable.getStackTrace().
-
-