invoke 数组_对于反射中的invoke()方法的理解
生活随笔
收集整理的这篇文章主要介绍了
invoke 数组_对于反射中的invoke()方法的理解
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
作者:码上猿梦http://cnblogs.com/daimajun/p/6545533.html
推荐阅读(点击即可跳转阅读)
1. SpringBoot内容聚合
2. 面试题内容聚合
3. 设计模式内容聚合
4. 排序算法内容聚合
5. 多线程内容聚合
先讲一下java中的反射:
反射就是将类别的各个组成部分进行剖析,可以得到每个组成部分,就可以对每一部分进行操作。在比较复杂的程序或框架中来使用反射技术,可以简化代码提高程序的复用性。
讲的是Method类的invoke()方法。
既然是讲invoke方法,那就不讲怎么使用反射了,代码上来先:
package online;import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method;import org.junit.Test;public class Msym {public void test(String[] arg){for (String string : arg) {System.out.println(string);}}@Testpublic void demo1() throws Exception {//获取字节码对象Class<Msym> clazz = (Class<Msym>) Class.forName("online.Msym");//获取一个对象Constructor con = clazz.getConstructor();Msym m = (Msym) con.newInstance();String[] s = new String[]{"aa","bb"};//获取Method对象Method method = clazz.getMethod("test", String[].class);//调用invoke方法来调用method.invoke(m, s);} }测试会报错:
红色框框显示是参数错误,test方法需要是字符串数组啊,我传递也是字符串数组,怎么就不对了??
让我们来看一下invoke方法:
invoke方法的参数,一个是Object类型,也就是调用该方法的对象,
第二个参数是一个可变参数类型,这个可变参数类型怎么能传递给一个数组类型呢?一个是多个参数。一个是一个数组参数,显然参数的个数不匹配,怎么解决呢?
解决办法就是将可变参数变成一个参数:
- 将传递进去的s强转为Object类型
- 将s重新包装成一个Object数组
测试一下:
结果可行。
总结
以上是生活随笔为你收集整理的invoke 数组_对于反射中的invoke()方法的理解的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 为什么每个邮件收到后都会有一个htm的附
- 下一篇: a as as big rat_你知道填