今天在和瑾华讨论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表达字符串数组也是可以的
绊脚石乃是进身之阶。