反射取含数组的构造函数时的参数类型传递

今天在和瑾华讨论ASM的时候,通过将反射的method转换为asm的method时遇到反射时数组的问题。当时两个人都卡住了,现在实验通了,顺手记录下来。

原始类:

通过反射取得构造函数, 通常的方法为:

如果要取得特定参数的构造函数,则为:

问题引出:而要取得含有数组的参数的构造函数如何办呢? 这也是我们卡住的原因,实验了clazz.getConstructor(String.class, String.class); clazz.getConstructor(Array.class, String.class);等都不行, 后来通过反射机制将参数类型输出进行查看,发现数组为:class [Ljava.lang.String;

输出为:

好的,虚拟主机,香港虚拟主机,美国服务器,现在知道是什么内容了,那就使用这种类型来构造:

测试结果正确,输出如下:

publiccom.alibaba.demoeo.reflect.classes.Person(java.lang.String[],java.lang.String)

考虑getConstructor的参数为可变数组,于是考虑通过传递数组类型给getConstructor方法,经测试后通过,具体如下:

使用此方法测试ASM转换:

或者

测试结果:

([Ljava/lang/String;)V

【注意】

1、今天讨论之后,也可以使用String[].class表达字符串数组也是可以的

绊脚石乃是进身之阶。

反射取含数组的构造函数时的参数类型传递

相关文章:

你感兴趣的文章:

标签云: