Here you can find the source of getMethod(Object target, String signature)
public static Method getMethod(Object target, String signature)
//package com.java2s; /*// www .j a v a2s. c om * Copyright (c) 2012, the Dart project authors. * * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except * in compliance with the License. You may obtain a copy of the License at * * http://www.eclipse.org/legal/epl-v10.html * * Unless required by applicable law or agreed to in writing, software distributed under the License * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express * or implied. See the License for the specific language governing permissions and limitations under * the License. */ import org.eclipse.core.runtime.Assert; import java.lang.reflect.Method; public class Main { /** * @return the declared {@link Method} with given signature, may be private. */ public static Method getMethod(Object target, String signature) { Assert.isNotNull(target); Assert.isNotNull(signature); Class<?> targetClass = getTargetClass(target); while (targetClass != null) { for (Method method : targetClass.getDeclaredMethods()) { if (getMethodSignature(method).equals(signature)) { method.setAccessible(true); return method; } } targetClass = targetClass.getSuperclass(); } return null; } /** * @return the {@link Class} or the given "target" - "target" itself if it is {@link Class} or its * {@link Class} if just some object. */ private static Class<?> getTargetClass(Object target) { if (target instanceof Class) { return (Class<?>) target; } return target.getClass(); } /** * @return the signature of the given {@link Method}, not JVM signature however, just some * reasonable signature to write manually. */ private static String getMethodSignature(Method method) { StringBuilder sb = new StringBuilder(); sb.append(method.getName()); sb.append('('); boolean firstParameter = true; for (Class<?> parameterType : method.getParameterTypes()) { if (!firstParameter) { sb.append(','); } firstParameter = false; sb.append(getClassName(parameterType)); } sb.append(')'); return sb.toString(); } /** * @return the name of the {@link Class} for signature. */ public static String getClassName(Class<?> clazz) { return clazz.getName(); } }