private static Object invokeMethod( final Object        obj,
                                        final String        methodName,
                                        final Object[]      args,
                                        final Class<?>[]    parameterTypes )
        throws
            UtilException
    {
        return invokeMethod( obj, obj.getClass(), methodName, args, parameterTypes );
    }
private static Object invokeMethod ( final Object obj , final String methodName , final Object [ ] args , final Class < ? > [ ] parameterTypes ) throws UtilException { return invokeMethod ( obj , obj . getClass ( ) , methodName , args , parameterTypes ) ; }
We have an object and a method name, but in order to invoke
a method on an object, we need the object's Class (type).

Given this Class we can then check that such a method exists
and throw an exception if it doesn't.

@param obj to invoke method on
@param methodName to invoke
@param args to use
@param parameterTypes types of arguments
@return method result
@throws net.crowmagnumb.util.UtilException if problem