Here you can find the source of getMethod(Class
private static <T> Method getMethod(Class<T> clazz, String methodName, Class<?>[] calledTypes) throws NoSuchMethodException
//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); } }