通过reflection控制一个对象的方法调用

package com.cn;

import java.lang.reflect.Method;

public class Reflect {
/**
 * 递归向上(父类)寻找方法
 * @param clazz0        目标Class
 * @param methodName    方法名称
 * @param arg_classes   方法参数Class
 * @return              Method
 * @throws Exception
 */
public static Method getMethod(Class clazz0, String methodName, 
        final Class[] arg_classes) throws Exception { 
    Method method = null; 
    try { 
        method = clazz0.getDeclaredMethod(methodName, arg_classes); 
    } catch (NoSuchMethodException e) { 
        try { 
            method = clazz0.getMethod(methodName, arg_classes); 
        } catch (NoSuchMethodException ex) { 
            if (clazz0.getSuperclass() == null) { 
                return method; 
            } else { 
                method = getMethod(clazz0.getSuperclass(), methodName, 
                        arg_classes); 
            } 
        } 
    } 
    return method; 

/**
 * @param obj0          目标对象
 * @param methodName    方法名
 * @param args_classes  方法参数class类型
 * @param arg_objects   方法实体参数
 * @return
 */
public static Object invoke(final Object obj0, final String methodName, 
        final Class[] args_classes, final Object[] arg_objects) { 
    try { 
        Method method = getMethod(obj0.getClass(), methodName, args_classes); 
        method.setAccessible(true); // 强制将方法设置成可访问状态(调用private方法)  
        return method.invoke(obj0, arg_objects); 
    } catch (Exception e) { 
        throw new RuntimeException(e); 
    } 

public static Object invoke(final Object obj, final String methodName, 
        final Class[] classes) { 
    return invoke(obj, methodName, classes, new Object[] {}); 

public static Object invoke(final Object obj, final String methodName) { 
    return invoke(obj, methodName, new Class[] {}, new Object[] {}); 

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值