关于下列程序中有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);
}
}}
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);
}
}}
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]);
如getMethod("add", types)所要调用的是add(Integer, Integer);
invoke()表示执行方法,第一个参数为所执行的对象,第二个参数是所要传递的实参数组
如meth.invoke(obj1, list)表示调用的是obj1.add(new Integer(37), new Integer(47));getMethod时通过方法名和参数类型
invoke时所传递的实参要与getMethod时一一对应