java初学关于反射问题

beyondmk2001 2011-06-25 04:02:21
关于下列程序中有2行不会理解,麻烦详细讲解一下。即getMethod和invoke的用法和参数类型的讲解。谢谢!

package com.softeem.book.clz;
import java.lang.reflect.Method;
public class ReflectInvoke {
public int add(int a,int b){
return a+b;
}
public static void main(String[] args){
try{
Class cls=Class.forName("com.softeem.book.clz.ReflectInvoke");
Class[] types=new Class[2];
types[0]=Integer.TYPE;
types[1]=Integer.TYPE;
Method meth=cls.getMethod("add", types);//这一行怎么理解?
ReflectInvoke obj1=new ReflectInvoke();
Object[] list=new Object[2];
list[0]=new Integer(37);
list[1]=new Integer(47);
Object retobj=meth.invoke(obj1, list);// 这一行该怎么理解?
Integer retval=(Integer)retobj;
System.out.println(retval.intValue());
}catch(Throwable e){
System.err.println(e);
}
}

}

...全文
47 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
JavaBoyCaoJi 2011-06-25
  • 打赏
  • 举报
回复
Method meth=cls.getMethod("add", types);//这一行怎么理解? 这个代表传入方法名以及参数类型

Object retobj=meth.invoke(obj1, list);// 这一行该怎么理解? 进行方法调用出入,传入方法对象以及参数

DLTOC 2011-06-25
  • 打赏
  • 举报
回复
getMethod用于获取方法,第一个参数是方法的名称,第二个参数是第一个参数所表示的方法的参数
如getMethod("add", types)所要调用的是add(Integer, Integer);
invoke()表示执行方法,第一个参数为所执行的对象,第二个参数是所要传递的实参数组
如meth.invoke(obj1, list)表示调用的是obj1.add(new Integer(37), new Integer(47));

getMethod时通过方法名和参数类型
invoke时所传递的实参要与getMethod时一一对应
飞跃颠峰 2011-06-25
  • 打赏
  • 举报
回复
Method meth=cls.getMethod("add", types);
cls是一个类com.softeem.book.clz.ReflectInvoke的实例
这句是在ReflectInvoke中寻找一个方法,该方法名为"add",有两个int类型的参数,即
ReflectInvoke.add(int,int)
令meth指向这个方法。

Object retobj=meth.invoke(obj1, list);
调用meth方法,obj1参数是meth方法所属的对象实例,list中保存有meth方法需要的参数,返回结果赋值给retobj.
联系上文,本句相当于
retobj = obj1.add(list[0],list[1]);

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧