您的位置:首页 > 编程语言 > Java开发

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

2016-05-25 22:18 741 查看
有时候我们希望像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 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 theMethod=clazz.getMethod(method,paramTypes);

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

return result;

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

}


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

public static void main(String[] args) {
MainTest test=new MainTest();

//我们测试要调用的hello方法只有一个String参数
Class[] paramTypes={String.class};

//给hello方法传参数"World"
Object[] params={"World"};

Object result=MainTest.call("com.test.MyTest-hello",paramTypes,params);

//已测试输出 "Hello World"
System.out.println((String)result);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息