Java RuntimeException Create toRuntimeExceptionOr(Class exClass, Throwable throwable)

Here you can find the source of toRuntimeExceptionOr(Class exClass, Throwable throwable)

Description

Returns the given throwable if it is of the expected type and returns it, or converts it into a RuntimeException , if necessary, and throws it.

License

BSD License

Parameter

Parameter Description
throwable the given exception to validate

Exception

Parameter Description
Error if <tt>throwable</tt> was such an instance and <tt>exClass</tt> was Error not nor a super class
RuntimeException if <tt>throwable</tt> was such an instance and <tt>exClass</tt> was not RuntimeExceptionnor a super class. If <tt>throwable</tt> was not aninstance of the expected exception class <tt>exClass</tt>, a runtime exception is throw nestingthe original <tt>throwable</tt>.

Return

the validated exception of type exClass

Declaration

@SuppressWarnings("unchecked")
public static <T extends Throwable> T toRuntimeExceptionOr(Class<T> exClass, Throwable throwable)
        throws Error, RuntimeException 

Method Source Code

//package com.java2s;
/*//from   w w w .java 2 s .  c o  m
 * =============================================================================
 * Simplified BSD License, see http://www.opensource.org/licenses/
 * -----------------------------------------------------------------------------
 * Copyright (c) 2008-2009, Marco Terzer, Zurich, Switzerland
 * All rights reserved.
 * 
 * Redistribution and use in source and binary forms, with or without 
 * modification, are permitted provided that the following conditions are met:
 * 
 *     * Redistributions of source code must retain the above copyright notice, 
 *       this list of conditions and the following disclaimer.
 *     * Redistributions in binary form must reproduce the above copyright 
 *       notice, this list of conditions and the following disclaimer in the 
 *       documentation and/or other materials provided with the distribution.
 *     * Neither the name of the Swiss Federal Institute of Technology Zurich 
 *       nor the names of its contributors may be used to endorse or promote 
 *       products derived from this software without specific prior written 
 *       permission.
 * 
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
 * POSSIBILITY OF SUCH DAMAGE.
 * =============================================================================
 */

public class Main {
    /**
     * Returns the given <tt>throwable</tt> if it is of the expected type and 
     * returns it, or converts it into a {@link RuntimeException}, if 
     * necessary, and throws it. 
     * 
     * If <tt>throwable</tt> is of the desired exception class, it is returned.
     * If not, an {@link Error} is thrown if <tt>throwable</tt> was such.
     * Otherwise, a {@link RuntimeException} is thrown, either the 
     * <tt>throwable</tt> itself or a newly created {@link RuntimeException}
     * nesting <tt>throwable</tt> 
     * (see {@link RuntimeException#RuntimeException(Throwable)}).
     *  
     * <p>The intended use of this method could somehow look like this:
     * <pre>
     * void myMethod(...) throws MyException {
     *   try {
     *      ... //any kinds of exceptions might occur 
     *   }
     *   catch(Throwable th) {
     *     throw ExceptionUtil.toRuntimeExceptionOr(MyException.class, th);
     *     //you never get here (and the compiler knows this)
     *   }
     * }
     * </pre>
     *
     * @param throwable   the given exception to validate
     * @return         the validated exception of type <tt>exClass</tt>
     * @throws Error   if <tt>throwable</tt> was such an instance 
     *                and <tt>exClass</tt> was {@link Error} not nor a super 
     *                class
     * @throws RuntimeException   if <tt>throwable</tt> was such an instance 
     *                and <tt>exClass</tt> was not {@link RuntimeException}
     *                nor a super class. If <tt>throwable</tt> was not an
     *                instance of the expected exception class 
     *                <tt>exClass</tt>, a runtime exception is throw nesting
     *                the original <tt>throwable</tt>. 
     */
    @SuppressWarnings("unchecked")
    public static <T extends Throwable> T toRuntimeExceptionOr(Class<T> exClass, Throwable throwable)
            throws Error, RuntimeException {
        if (exClass.isAssignableFrom(throwable.getClass()))
            return (T) throwable;
        if (throwable instanceof RuntimeException)
            throw (RuntimeException) throwable;
        if (throwable instanceof Error)
            throw (Error) throwable;
        throw new RuntimeException(throwable);
    }
}

Related

  1. toRuntimeException(Throwable e)
  2. toRuntimeException(Throwable t)
  3. toRuntimeException(Throwable t)
  4. toRuntimeException(Throwable throwable)
  5. toRuntimeException(Throwable throwable)