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

摘要:

对于大多数java的新手一般不会用到这两个方法,但是即使是对java有了一定的了解的人,对这两个方法的使用,也存在着一定的问题,下面就这个问题作出一定的解释,能给大家一个初步的认识。 

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对应的是此方法中要求的形参类型 
public Method getMethod(String name, Class[] parameterTypes) throws NoSuchMethodException, SecurityException 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值