java 基于反射动态调用某个类的方法 【参数是:方法名、参数集合、类的全包名】

反射的用处很大,因为可以在某个类、对象在运行时获得这个对象的属性和方法,更改这个类的属性和方法。

曾经在项目中我需要解决一个问题:通过字段来确定他是属于哪个类的,这个时候反射的作用就凸显出来了。

今天这篇文字用来记录如何通过反射动态调用某个类的方法。

参数:


  1. 要调用的类的全包名
  2. 要调用的类的方法名
  3. 要传入的参数集合

/**
	 * 通用反射方法
	 * @param classUrl 要调用类的全包名
	 * @param function 要调用的方法名
	 * @param args	要传递的参数
	 * @return
	 * @throws Exception 
	 */
	public static Object commonReflectMethod(String classUrl,String function,List args) throws Exception{
		//获取要操作的类
		Class clazz=Class.forName(classUrl);
		//用来存放要调用的参数类型(int,string,......)
		Class[] param=null;
		//用于存放传参的数据数组
		Object[] paramObj=new Object[args.size()];
		//如果传递了参数
		if(args.size()>0){
			if(args.size()==1){
				param=new Class[args.size()];
			}else{
				param=new Class[args.size()-1];
			}
			//遍历参数集合
			for (int i = 0; i < param.length; i++) {
				//获取每个类参数的所属的类型
				param[i]=args.get(i).getClass();
				System.out.println(args.get(i).getClass());
				//list转数组
				paramObj[i]=args.get(i);
			}
			Method method=clazz.getMethod(function, param);
			//反射传入数据
			Object obj=method.invoke(clazz.newInstance(),paramObj);
			return obj;
			
		}
		return null;
	}
	

	//调用............
	public static void main(String[] args) throws Exception {
		
		List arg=new ArrayList();
		arg.add("我要置业小上海");
	String str=	(String)commonReflectMethod("com.reflex.House","getNum",arg);
	System.out.println(str);
非常重要的说明:
    我们在获取参数的类型时(对应的上图代码:args.get(i).getClass();)  请注意!! 如果参数是基本类型比如:
int ,long ,short,byte,double ,float等,则会出现问题。因为这些类型通过getClass方法后会变成包装类,所以通常我在使用的时候都会把基本类型参数String.valueOf()


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值