code: public static <T> T invoke(Object obj, String methodName, Object[] arguments, Class<T> returnType) {
      return invoke(obj, methodName, getArgumentTypes(arguments), arguments, returnType);
    }
docs: Calls the method with the specified name on the given object, passing the given arguments and casting
  the method's return value to the desired class type.  This method assumes the "method" to invoke
  is an instance (object) member method.
  
  @param <T> the desired return type in which the method's return value will be cast; should be compatible with
  the method's return type.
  @param obj the Object on which the method to invoke is defined.
  @param methodName a String indicating the name of the method to invoke.
  @param arguments an array of objects constituting the method's signature as well as the arguments
  to the method's parameters.
  @param returnType the desired Class type in which to cast the method's return value.
  @return the specified method's return value cast to the desired return type.
  @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 #getArgumentTypes(Object...)
  @see #invoke(Object, String, Class[], Object[], Class)