欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

invoke 数组_对于反射中的invoke()方法的理解

发布时间:2025/3/20 编程问答 28 豆豆
生活随笔 收集整理的这篇文章主要介绍了 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()方法的理解的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。