java:能否通过反射获取方法的参数名字?

前言:

最近在牛客网上看到有人分享面试经验,其中有一个非常刁钻的问题:能否通过反射获取方法的参数名字?我我觉得非常奇怪,明明反射获取方法后获取参数(Parameter)中带有getName方法,怎么可能获取不到呢?

后续:

但在网上翻阅资料发现,原理jdk1.8之前java文件编译成class文件时并不会将参数名字也一起编译进去,而是以arg0,arg1这种模糊名字来替代。

所以在jdk1.8前是无法获取参数名字的!获取到的只是arg0,arg1这种替代“名字”。想要获取参数名字只能通过ASM、javassist等外部方法来实现。

但jdk1.8就能获取到参数名字了吗?其实还不够,我们常用的ide eclipse需要调整配置才行,具体如下:

将Add variable勾选就行,其实原理就是编译时执行了javac -parameters命令,加上了-parameters会把参数名也编译进去。

然后重新编译完成后就可以获取到参数名字了,代码如下:

    Class<?> class1=Class.forName("X");
    Method[] methods=class1.getMethods();
    for (int i = 0; i < methods.length; i++) {
		System.out.println(methods[i].getName());
		Parameter[] parameters=methods[i].getParameters();
		for(int j=0;j<parameters.length;j++)
		{
			System.out.println(parameters[j].getName()+parameters[j].getType());
		}
	}

猜你喜欢

转载自blog.csdn.net/qq_36642340/article/details/81321526