Development Android

//package org.beryl.util;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
 class Reflection {
  public static final ArrayList> ZeroParameters = new ArrayList>();
  /**
   * Basically Class.getMethod but allows for a list of parameter types instead of a variable arguments list.
   * @throws SecurityException
   * @throws NoSuchMethodException
   */
  public static Method findDeclaredMethod(final Class clazz, final String methodName, List> paramTypes) throws SecurityException, NoSuchMethodException {
    Method method = null;
    Method [] methods = clazz.getDeclaredMethods();
    if(paramTypes == null) {
      paramTypes = ZeroParameters;
    }
    for(Method candidate : methods) {
      if(candidate.getName().equals(methodName)) {
        Class[] candidateParamTypes = candidate.getParameterTypes();
        if(candidateParamTypes.length == paramTypes.size()) {
          final int length = candidateParamTypes.length;
          boolean parametersMatch = true;
          for(int i = 0; i < length && parametersMatch; i++) {
            if(! candidateParamTypes[i].isAssignableFrom(paramTypes.get(i))) {
              parametersMatch = false;
            }
          }
          if(parametersMatch) {
            method = candidate;
            method.setAccessible(true);
            break;
          }
        }
      }
    }
    /* Try this to:
    method = clazz.getDeclaredMethod(methodName, (Class[]) paramTypes.toArray());
    if(method != null) {
      method.setAccessible(true);
    }
    */
    return method;
  }
}