分享

关于Method类中invoke方法和Class类中getmethod方法的使用

 gideshi 2012-04-27

sheen:

thisMethod.invoke(thisClass, new Object[] {InParam,new Integer(OutParamNum)})其中InParam为String[],而不是String, 所以不能用new String(InParam),程序运运行此句就停, what should I do?
help! 多谢各位,多谢!

humming评论:

此处sheen调用的invoke方法属于java.lang..reflect.Method中的一个方法,这里的thisMethod是一个Method变量,sheen想调用thisMethod对应的一个方法,可能在参数的设置中有问题,它没有通过编译。关于invoke方法的具体使用见附录)

Wingzhang:

you may try as following:
Object[] realArgs = new Object[2];
String[] strArgs = {"aa","bb"};
Integer intArgs = ....;
realArgs[0] = strArgs;
realArgs[1] = intArgs;
thisMethod.invoke(thisClass,realArgs);

humming评论:

此处wingzhang给出了invoke方法的一个参数的具体用法,在这里认为要调用的方法中即thisMethod对应的方法中的形参中要求包括着String[]和Integer,这里wingzhang提到的realArgs就起到这个作用,但是没有很清楚的说明第一个参数是如何用的。

sheen:

Thank you, I will try...

shenn:

I have try, but the same result: 无法调用此方法
//评注:sheen兄还是没有领会到其要领,也不能完全怪他,因为wingzhang大侠没有把
它解释说的很清楚。不过Wingzhang大侠还是非常热情的,下面他就给出了一个完整的例
子。

Wingzhang:

Can you put out your method signature?
I have passed the following examples:

import java.lang.reflect.*;
public class TestM
{

public static void main(String[] args)
{

try{

TestM t = new TestM();
Class c = t.getClass();
Class[] cargs = new Class[2];
String[] realArgs = {"aa","bb"};
cargs[0] = realArgs.getClass();
Integer in = new Integer(2);
cargs[1] = in.getClass();
Method m = c.getMethod("test",cargs); //调用了test方法,返回值为Method变量
Object[] inArgs = new Object[2];
inArgs[0] = readArgs; //呵呵,此处wingzhang大侠敲错了应该是realArgs
inArgs[1] = in;
m.invoke(t,inArgs);

}catch(Exception e){System.out.println(e);}

}

public void test(String[] str,Integer stri)
{

for(int j = 0; j < str.length; j ++)
System.out.println(str[j]);
System.out.println(stri.intValue());

}

}

humming评论:

这个sample给出了invoke方法和getmethod方法的使用,getmethod的作用就是取得对应方法的句柄,可以看到要想能使invoke方法的顺利通过,它的第一个参数必须是一个实例化的,也就是这里的t,它的第二个参数已经在上一段的评论中提到了,这个例子的第二个参数同上面评论中的一样。此段小程序的运行结果就是打印aa,bb ,和2)

sheen:

Thank you, I have passed it! // 通过了,sheen兄好高兴。

总结:

这次讨论只是对getmethod和invoke的参数设置进行了阐述,但是没有真正体现出Method类和Class的威力,关于其真正的能力,还有待于进一步的讨论。另外,整理之中如果有什么问题,还望大侠多多指教。

附录:

public Object invoke(Object obj,Object[] args) throws IllegalAccessException, IllegalArgumentException,InvocationTargetException

参数obj 代表的是对应类的实例,参数args对应的是此方法中要求的形参类型

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多