点击上方“后端技术精选”,选择“置顶公众号”
技术文章第一时间送达!
cnblogs.com/daimajun/p/6545533.html
推荐阅**读(点击即可跳转阅读)**
**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);
}
}
@Test
public void demo1() throws Exception {
//获取字节码对象
ClassMsym clazz = (ClassMsym) 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数组
测试一下:
结果可行。
看到这里了,关注一个?
原文始发于微信公众号(后端技术精选):对于反射中的invoke()方法的理解