Java Reflection Method Name getMethod(Class clazz, String methodName, Class[] calledTypes)

Here you can find the source of getMethod(Class clazz, String methodName, Class[] calledTypes)

Description

get Method

License

Open Source License

Declaration

private static <T> Method getMethod(Class<T> clazz, String methodName, Class<?>[] calledTypes)
            throws NoSuchMethodException 

Method Source Code

//package com.java2s;
/**/*from ww w.  j  ava 2 s .  c o  m*/
 * Distribution License:
 * JSword is free software; you can redistribute it and/or modify it under
 * the terms of the GNU Lesser General Public License, version 2.1 as published by
 * the Free Software Foundation. This program is distributed in the hope
 * that it will be useful, but WITHOUT ANY WARRANTY; without even the
 * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 * See the GNU Lesser General Public License for more details.
 *
 * The License is available on the internet at:
 *       http://www.gnu.org/copyleft/lgpl.html
 * or by writing to:
 *      Free Software Foundation, Inc.
 *      59 Temple Place - Suite 330
 *      Boston, MA 02111-1307, USA
 *
 * Copyright: 2005
 *     The copyright to this program is held by it's authors.
 *
 * ID: $Id$
 */

import java.lang.reflect.Method;

public class Main {
    private static <T> Method getMethod(Class<T> clazz, String methodName, Class<?>[] calledTypes)
            throws NoSuchMethodException {
        // The bad news is that we can't use something like:
        // clazz.getMethod(methodNames, called_types);
        // because it does not cope with inheritance (at least in the MVM)
        // so we have to search ourselves...
        Method[] testMethods = clazz.getMethods();
        outer: for (int i = 0; i < testMethods.length; i++) {
            // This this the right method name?
            if (!testMethods[i].getName().equals(methodName)) {
                continue outer;
            }

            // The right number of params
            Class<?>[] testTypes = testMethods[i].getParameterTypes();
            if (testTypes.length != calledTypes.length) {
                continue;
            }

            // Of the right types?
            for (int j = 0; j < testTypes.length; j++) {
                if (!testTypes[j].isAssignableFrom(calledTypes[j])) {
                    continue outer;
                }
            }

            // So this is a match
            return testMethods[i];
        }

        throw new NoSuchMethodException(methodName);
    }
}

Related

  1. getMethod(Class klass, String methodName, Class... paramTypes)
  2. getMethod(Class klass, String name, String name2)
  3. getMethod(Class theClass, String methodName, Class[] paramTypes)
  4. getMethod(Class c, String name, Class... argTypes)
  5. getMethod(Class clazz, String methodName)
  6. getMethod(Class type, String methodName, Class... params)
  7. getMethod(final Class atClass, final String name, final Class[] paramType)
  8. getMethod(final Class clazz, final String methodName, final boolean factoryMethod, final boolean failIfNotFound)
  9. getMethod(final String methodName, final Class objClass, final Class[] paramClasses)