Class Throwables


  • public final class Throwables
    extends Object
    Static utility methods pertaining to instances of Throwable.

    NOTE: proxy for the Guava implementation of Throwables.

    Since:
    1.14
    Author:
    Yaniv Inbar
    • Method Detail

      • propagate

        public static RuntimeException propagate​(Throwable throwable)
        Propagates throwable as-is if it is an instance of RuntimeException or Error, or else as a last resort, wraps it in a RuntimeException then propagates.

        This method always throws an exception. The RuntimeException return 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
      • propagateIfPossible

        public static void propagateIfPossible​(Throwable throwable)
        Propagates throwable exactly as-is, if and only if it is an instance of RuntimeException or Error. Example usage:
            try {
              someMethodThatCouldThrowAnything();
            } catch (IKnowWhatToDoWithThisException e) {
              handle(e);
            } catch (Throwable t) {
              Throwables.propagateIfPossible(t);
              throw new RuntimeException("unexpected", t);
            }
         
        Parameters:
        throwable - throwable (may be null)
      • propagateIfPossible

        public static <X extends Throwable> void propagateIfPossible​(Throwable throwable,
                                                                     Class<X> declaredType)
                                                              throws X extends Throwable
        Propagates throwable exactly as-is, if and only if it is an instance of RuntimeException, Error, or declaredType. Example usage:
            try {
              someMethodThatCouldThrowAnything();
            } catch (IKnowWhatToDoWithThisException e) {
              handle(e);
            } catch (Throwable t) {
              Throwables.propagateIfPossible(t, OtherException.class);
              throw new RuntimeException("unexpected", t);
            }
        
        Parameters:
        throwable - throwable (may be null)
        declaredType - the single checked exception type declared by the calling method
        Throws:
        X extends Throwable