集册 Java实例教程 使用反射对对象调用方法

使用反射对对象调用方法

欢马劈雪     最近更新时间:2020-01-02 10:19:05

529
使用反射对对象调用方法
//N o  w  J a v a . c o m - 时  代  Java

/*

 *  PHEX - The pure-java Gnutella-servent.

 *  Copyright (C) 2001 - 2005 Phex Development Group

 *

 *  This program is free software; you can redistribute it and/or modify

 *  it under the terms of the GNU General Public License as published by

 *  the Free Software Foundation; either version 2 of the License, or

 *  (at your option) any later version.

 *

 *  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 General Public License for more details.

 *

 *  You should have received a copy of the GNU General Public License

 *  along with this program; if not, write to the Free Software

 *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

 */

import java.lang.reflect.*;


public class Main{


    public static Object invokeMethod(Object obj, String methodName,

            Object param) throws Throwable {

        Object[] params = { param };

        return invokeMethod(obj, methodName, params);

    }

    public static Object invokeMethod(Object obj, String methodName,

            Object[] params) throws Throwable {

        Class[] paramTypes = null;

        if (params != null) {

            paramTypes = new Class[params.length];

            for (int i = 0; i < params.length; i++) {

                paramTypes[i] = params[i].getClass();

            }

        }
        /*
        N o w  J a v a  . c o m 提 供
        */

        return invokeMethod(obj, methodName, params, paramTypes);

    }

    public static Object invokeMethod(Object obj, String methodName,

            Object[] params, Class[] paramTypes) throws Throwable {

        Class clazz;

        if (obj instanceof Class) {

            clazz = (Class) obj;

        } else {

            clazz = obj.getClass();

        }


        try {

            Method method = clazz.getDeclaredMethod(methodName, paramTypes);

            method.setAccessible(true);

            Object retVal = method.invoke(obj, params);

            return retVal;

        } catch (IllegalAccessException exp) {

            exp
展开阅读全文