java通过字符串调用方法,java反射应用实例

有时候我们希望像Javascript一样通过字符串调用方法,这就需要用到java的反射机制了。

下面给出一个示例:

1、先写一个测试的被调用方法(在 com.test 包下的 MyTest 方法,故全类名就是 com.test.MyTest)

package com.test;
public class MyTest {
	public String hello(String param){
		return "Hello "+param;
	}
}


2、再写一个通过字符串调用其他方法的工具类

public class CallMethod {

    /**
     * 通过字符串串调用方法
     * @param classAndMethod 类名-方法名,通过此字符串调用类中的方法
     * @param paramTypes 方法类型列表(因为方法可能重载)
     * @param params 需要调用的方法的参数列表
     * @return
     */
    public static Object call(String classAndMethod,Class[] paramTypes,Object[] params){
        String[] args=classAndMethod.split("-");
        //要调用的类名
        String className=args[0];
        //要调用的方法名
        String method=args[1];
        try {
            //加载类,参数是完整类名
            Class clazz = Class.forName(className);

            //第一个参数是方法名,后面的参数指示方法的参数类型和个数
            Method method=clazz.getMethod(method,paramTypes);

            //accessiable设为true表示忽略java语言访问检查(可访问private方法)
            //method.setAccessible(true);

            //第一个参数类实例(必须有对象才能调用非静态方法,如果是静态方法此参数可为null)
            //第二个是要传给方法的参数
            Object result=method.invoke(clazz.newInstance(),params);

            return result;

            //这里为了博客上简洁一些把其他catch都去掉了(复制代码的同学应该把其他异常的catch搞出来)
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

}


3、写一个main方法测试是否正确调用

public static void main(String[] args) {
	//我们测试要调用的hello方法只有一个String参数
	Class[] paramTypes={String.class};
		
	//给hello方法传参数"World"
	Object[] params={"World"};
		
	Object result=CallMethod.call("com.test.MyTest-hello",paramTypes,params);
		
	//已测试输出 "Hello World"
	System.out.println((String)result);
}

 

 

 

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值