转-关于Method类中invoke方法和Class类中getmethod方法的使用
2013-12-24 09:21
531 查看
摘要:
对于大多数java的新手一般不会用到这两个方法,但是即使是对java有了一定的了解的人,对这两个方法的使用,也存在着一定的问题,下面就这个问题作出一定的解释,能给大家一个初步的认识。
对于大多数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
相关文章推荐
- java反射中Method类invoke方法的使用方法
- 关于Control的Invoke方法的使用
- 关于Control的Invoke方法的使用
- java反射中Method类invoke方法的使用方法
- Method类invoke方法的使用
- Method类invoke方法的使用
- phpcms关于url路由在二次开发中的使用方法介绍-实现泛解析
- 关于jQ中$(selector).data(name,value)方法的使用
- 虚幻4调试模式和关于虚幻引擎4.18和4.19源码版,无法使用DebuggameEditor调试模式的解决方法。
- POJ1007 关于STL排序方法 动态数组的创建 和向量的使用
- 一个关于WCF调用远程链接返回405错误不允许使用此方法的问题
- 关于Android模拟器键盘不能使用的解决方法
- 关于servlet抽取,以及getMethod方法的参数
- 关于使用Github,gitignore不起作用的解决方法
- 关于拦截结果的监听器不能使用invocation.invoke()!
- 关于在arm裸板编程时使用printf问题的解决方法
- Winform关于OpenFileDialog的使用方法
- Java中Class类的getResource()和getResourceAsStream()方法的使用
- mockito-关于@Mock和@Spy的使用方法
- C#多线程 Invoke方法的使用收藏