docs: @SuppressWarnings("unchecked")
    public static <T> T invoke(Object object, Class<?> clazz, String methodName, Object... arguments) throws Exception
    {
      Params.notNull(clazz, "Class");
      Params.notNullOrEmpty(methodName, "Method name");
      Class<?>[] parameterTypes = getParameterTypes(arguments);
      try {
        Method method = clazz.getDeclaredMethod(methodName, parameterTypes);
        return (T)invoke(object, method, arguments);
      }
      catch(NoSuchMethodException e) {
        // optimistic attempt to locate the method has failed
        // maybe because method parameters list includes interfaces, primitives or null
        // there is no other option but to search through all object methods
  
        methodsLoop: for(Method method : clazz.getDeclaredMethods()) {
          Class<?>[] methodParameters = method.getParameterTypes();
          if(!method.getName().equals(methodName)) {
            continue;
          }
          if(methodParameters.length != arguments.length) {
            continue;
          }
          // test if concrete arguments list match method formal parameters; if not continue methods loop
          // null is accepted as any type
          for(int i = 0; i < arguments.length; i++) {
            if(arguments[i] != null && !Types.isInstanceOf(arguments[i], methodParameters[i])) {
              continue methodsLoop;
            }
          }
          return (T)invoke(object, method, arguments);
        }
        throw new NoSuchBeingException("Method %s(%s) not found.", methodName, parameterTypes);
      }
    }