code: public static void invoke(Object obj, String methodName, Class<?>[] parameterTypes, Object... arguments) {
      invoke(obj, resolveMethod(obj.getClass(), methodName, parameterTypes, arguments, Void.class),
        arguments, Void.class);
    }
docs: Calls the method with the specified name and signature on the given object, passing the given arguments.
  This method assumes the "method" to invoke is an instance (object) member method.
  
  @param obj the Object on which the method to be invoked is defined.
  @param methodName a String indicating the name of the method to invoke.
  @param parameterTypes an array of Class types corresponding to the method's parameter types in order to specify
  the exact signature (order, type and number) of the method to invoke.  This is necessary in cases where the
  method maybe overloaded.
  @param arguments an array of objects constituting the method's signature as well as the arguments
  to the method's parameters.
  @throws IllegalArgumentException if the method with the specified name is not declared and defined
  on the given object's class type.
  @throws MethodInvocationException if the method invocation (call) fails to be executed successfully.
  @see #getMethod(Class, String, Class[])
  @see #getMethodSignature(String, Class[], Class)
  @see #invoke(Object, java.lang.reflect.Method, Object[], Class)