之前阿里面试的时候,面试官问我Java通过反射可以获取到一个方法的形参名称吗?
听到这个问题我是懵逼的,之前只知道通过反射可以获取方法名,形参的类型,但是从来没有注意可不可以获取方法形参的名称。在网上查了一些资料之后,知道在jdk1.7之前获取方法中形参的名称的是打印arg0类型。但是在jdk1.8之后,已经做了改动。可以获取到形参的名称。
注意本文的JDK是基于1.8的。1.8版本以下的博主并没有做过测试。
第一步:通过设置 File-->Settings-->Build,Execution,Deployment-->Compiler-->Java Compiler中设置 Addition command paraters:为 -parameters 。
第二步:Build-->Rebuild Project重新build一下project就好了。
下面写上我们的测试用例:
想获取类的Class对象,通过该Class对象的getMethods方法获取类中的公有方法(注意代码中定义的getMethods方法获取不到类中定义的私有方法)。然后遍历类中定义的公有方法,取出方法中的参数。在控制台进行打印。
打印的结果如下:
形参名称 a 形参类型 int
在测试代码中,创建了一个Demo类,并且在类中定义了一个get方法,方法中传入了一个int类型的参数a。可以看到,在Jdk1.8中是可以获取到形参的名称。