黑马程序员技术交流社区
标题:
java反射疑问
[打印本页]
作者:
郭强
时间:
2013-4-28 16:11
标题:
java反射疑问
本帖最后由 郭强 于 2013-4-28 20:17 编辑
在学习Java反射时,有些疑问不解,通过反射,拿到一个字节码文件的所有public类型的方法,然后调用方法,如果是有参数的方法,怎么去构造函数所对应的类型参数?并传递参数调用函数?
如:
public void add(String str,int x){
System.out.println(str+x);
} 上面的函数,通过反射获Method对象后,怎么通过其参数类型,传递参数并调用啊?(假设调用者不知道这个函数的参数类型),完全通过反射得到参数类型,然后根据参数类型去构造实参调用
作者:
刘胜寒
时间:
2013-4-28 16:16
假设调用者不知道这个函数的参数类型...
你不知道这个函数的参数类型。。。
那你怎么通过反射获取这个Method对象呢....
难道是我没理解你意思..
作者:
cowthan
时间:
2013-4-28 16:29
Method m = yourObj.getMethod("add");
Class[] ps = m.getParameterTypes()就可以获取add方法的参数个数和参数类型
//拿到之后构造出参数:Object[] params = new Object[]{"地球很危险", 23};
调用时就是:m.invoke(myObj, params) //相当于调用了myObj.add("地球很危险", 23)
作者:
肖宇宥
时间:
2013-4-28 17:35
import java.lang.reflect.Method;
public class Test {
/**
* @param args
* @throws NoSuchMethodException
* @throws SecurityException
*/
public static void main(String[] args) throws Exception {
Demo demo=new Demo();
Class[] clazz=null;
/*不知道参数的话,就必需得到所有的方法,在判断
* demo.getClass().getMethod('add');这样会报错*/
Method[] method=demo.getClass().getMethods();
for(Method med:method){
if(med.getName().equals("add")){
/*得到参数类型的集合*/
clazz=med.getParameterTypes();
}
}
/**/
Method add=demo.getClass().getMethod("add", clazz);
add.invoke(demo, "hello",1);
}
}
class Demo{
public void add(String str,int x){
System.out.println(str+x);
}
}
复制代码
作者:
郭强
时间:
2013-4-28 20:10
这个不错,又回顾了Java5新特性
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2