Here you can find the source of invokeMethod(Method method, Object target, Object[] args)
Parameter | Description |
---|---|
method | the method to invoke |
target | the target object to invoke the method on |
args | the invocation arguments (may be <code>null</code>) |
public static Object invokeMethod(Method method, Object target, Object[] args)
//package com.java2s; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; public class Main { /**//from w w w .j av a 2 s. c om * Invoke the specified {@link Method} against the supplied target object * with the supplied arguments. The target object can be <code>null</code> * when invoking a static {@link Method}. * <p>Thrown exceptions are handled via a call to {@link #handleReflectionException}. * * @param method the method to invoke * @param target the target object to invoke the method on * @param args the invocation arguments (may be <code>null</code>) * @return the invocation result, if any */ public static Object invokeMethod(Method method, Object target, Object[] args) { try { return method.invoke(target, args); } catch (Exception ex) { handleReflectionException(ex); } throw new IllegalStateException("Should never get here"); } /** * Handle the given reflection exception. Should only be called if * no checked exception is expected to be thrown by the target method. * <p>Throws the underlying RuntimeException or Error in case of an * InvocationTargetException with such a root cause. Throws an * IllegalStateException with an appropriate message else. * * @param ex the reflection exception to handle */ public static void handleReflectionException(Exception ex) { if (ex instanceof NoSuchMethodException) { throw new IllegalStateException("Method not found: " + ex.getMessage()); } if (ex instanceof IllegalAccessException) { throw new IllegalStateException("Could not access method: " + ex.getMessage()); } if (ex instanceof InvocationTargetException) { handleInvocationTargetException((InvocationTargetException) ex); } if (ex instanceof RuntimeException) { throw (RuntimeException) ex; } handleUnexpectedException(ex); } /** * Handle the given invocation target exception. Should only be called if * no checked exception is expected to be thrown by the target method. * <p>Throws the underlying RuntimeException or Error in case of such * a root cause. Throws an IllegalStateException else. * @param ex the invocation target exception to handle */ public static void handleInvocationTargetException(InvocationTargetException ex) { rethrowRuntimeException(ex.getTargetException()); } /** * <p>Throws an IllegalStateException with the given exception as root cause.</p> * * @param ex the unexpected exception */ private static void handleUnexpectedException(Throwable ex) { // Needs to avoid the chained constructor for JDK 1.4 compatibility. IllegalStateException isex = new IllegalStateException("Unexpected exception thrown"); isex.initCause(ex); throw isex; } /** * Rethrow the given {@link Throwable exception}, which is presumably the * <em>target exception</em> of an {@link InvocationTargetException}. * Should only be called if no checked exception is expected to be thrown by * the target method. * <p>Rethrows the underlying exception cast to an {@link RuntimeException} * or {@link Error} if appropriate; otherwise, throws an * {@link IllegalStateException}. * * @param ex the exception to rethrow * @throws RuntimeException the rethrown exception */ public static void rethrowRuntimeException(Throwable ex) { if (ex instanceof RuntimeException) { throw (RuntimeException) ex; } if (ex instanceof Error) { throw (Error) ex; } handleUnexpectedException(ex); } }