code: @SuppressWarnings("all")
    public static Method findMethod(Class<?> type, String methodName, Object... arguments) {
  
      for (Method method : type.getDeclaredMethods()) {
  
        if (method.getName().equals(methodName)) {
  
          Class<?>[] parameterTypes = method.getParameterTypes();
  
          if (ArrayUtils.nullSafeLength(arguments) == parameterTypes.length) {
  
            boolean match = true;
  
            for (int index = 0; match && index < parameterTypes.length; index++) {
              match &= instanceOf(arguments[index], parameterTypes[index]);
            }
  
            if (match) {
              return method;
            }
          }
        }
      }
  
      return (type.getSuperclass() != null ? findMethod(type.getSuperclass(), methodName, arguments) : null);
    }
docs: Attempts to find a method with the specified name on the given class type having a signature with parameter types
  that are compatible with the given arguments.  This method searches recursively up the inherited class hierarchy
  for the given class type until the desired method is found or the class type hierarchy is exhausted, in which case,
  null is returned.
  
  @param type the Class type to search for the desired method.
  @param methodName a String value indicating the name of the method to find.
  @param arguments an array of object values indicating the arguments the method's parameters must accept.
  @return a Method on the given class type with the specified name having a signature compatible with the arguments,
  or null if no such Method exists on the given class type or one of it's inherited (parent) class types.
  @throws NullPointerException if the given class type is null.
  @see java.lang.Class
  @see java.lang.Class#getDeclaredMethods()
  @see java.lang.Class#getSuperclass()
  @see java.lang.reflect.Method