关于下列程序中有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);
}
}}

解决方案 »

  1.   

    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]);
      

  2.   

    getMethod用于获取方法,第一个参数是方法的名称,第二个参数是第一个参数所表示的方法的参数
        如getMethod("add", types)所要调用的是add(Integer, Integer);
    invoke()表示执行方法,第一个参数为所执行的对象,第二个参数是所要传递的实参数组
        如meth.invoke(obj1, list)表示调用的是obj1.add(new Integer(37), new Integer(47));getMethod时通过方法名和参数类型
    invoke时所传递的实参要与getMethod时一一对应
      

  3.   

    Method meth=cls.getMethod("add", types);//这一行怎么理解? 这个代表传入方法名以及参数类型 Object retobj=meth.invoke(obj1, list);// 这一行该怎么理解? 进行方法调用出入,传入方法对象以及参数