Java tutorial
//package com.java2s; /* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2011 OpenConcerto, by ILM Informatique. All rights reserved. * * The contents of this file are subject to the terms of the GNU General Public License Version 3 * only ("GPL"). You may not use this file except in compliance with the License. You can obtain a * copy of the License at http://www.gnu.org/licenses/gpl-3.0.html See the License for the specific * language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each file. */ import java.lang.reflect.Method; import java.util.List; public class Main { private static final Method findMethod(Class<?> clazz, String name, List<Class<?>> actualArgs) { for (final Method m : clazz.getMethods()) { if (m.getName().equals(name) && callableWith(m.getParameterTypes(), actualArgs)) { return m; } } return null; } private static final boolean callableWith(Class<?>[] formalArgs, List<Class<?>> actualArgs) { if (formalArgs.length != actualArgs.size()) return false; int i = 0; for (final Class<?> argClass : formalArgs) { final Class<?> actualArg = actualArgs.get(i); // null match everything if (actualArg != null && !argClass.isAssignableFrom(actualArg) && argClass != getPrimitive(actualArg)) return false; i++; } return true; } private static Class<?> getPrimitive(Class<?> argClass) { if (argClass == Boolean.class) return Boolean.TYPE; else if (argClass == Character.class) return Character.TYPE; else if (argClass == Byte.class) return Byte.TYPE; else if (argClass == Short.class) return Short.TYPE; else if (argClass == Integer.class) return Integer.TYPE; else if (argClass == Long.class) return Long.TYPE; else if (argClass == Float.class) return Float.TYPE; else if (argClass == Double.class) return Double.TYPE; else return null; } }