可以让反射获取到方法参数实际的变量名设置

简介: 可以让反射获取到方法参数实际的变量名设置

       反射在项目中会经常被用到,比如优化项目结构,比如解析协议格式等。在使用反射时,经常会用来调用某个对象的方法,通过反射来调用对象中的方法时,也需要给方法的参数进行赋值。当方法的参数来自于外部输入时,在反射中就可能需要拿到方法的参数名称。默认情况下通过反射获得的方法参数名为 arg0、arg1 (也有可能是 var1 和 var2)样的,那么就无法对方法进行传参了。

       比如,当我们输入的 URI 为 pwd=1234567&name=zhangsan,而 Controller 中的 login 方法的参数为 String name, String pwd 时,通过反射给调用 login 方法时,就需要明确知道 login 的两个参数名了。通过参数名 name 可以得到 uri 中 name 的值(类似 request.getParameter("name")这样的代码),通过参数 pwd 可以得到 uri 中 pwd 的值。如果反射获取到的参数名是 arg0、arg1、var1、var2 这样的话,就无法得到 URI 传递来的值了。

       因此,本文就简单说说如何让反射获取到方法参数实际的变量名的设置方法吧。

IDEA 的设置方法

       在 JDK 1.8 提供了 -parameters 参数,它会将 Java 代码中的方法的参数名写入到 .class 文件中。具体在 IDEA 中的设置方法为:File -> Settings -> Build -> Compiler -> Java Compiler,具体如下图:

11111.png

       然后,在 Additional command line parameters: 中设置即可。


       -parameters 的作用是:生成元数据以用于方法参数的反射。这个解释是 javac 命令给出的解释。

Maven 的设置方法

       当项目使用 Maven 构建时,需要通过 Maven 的插件来进行设置,Maven 的配置如下所示:

<build><plugins><plugin><artifactId>maven-compiler-plugin</artifactId><version>3.8.0</version><configuration><source>1.8</source><target>1.8</target><encoding>utf8</encoding><compilerArgs><arg>-parameters</arg></compilerArgs></configuration></plugin></plugins></build>

       上面就是”可以让反射获取到方法参数实际的变量名“设置的方法。从上面的 XML 来看,其实还是使用了 -parameters 的编译参数,只是指定的方式有所不同而已。

相关文章
|
11月前
如何通过反射将字符串转换为类
如何通过反射将字符串转换为类
41 0
|
Java
Java 反射修改类的常量值、静态变量值、属性值
Java 反射修改类的常量值、静态变量值、属性值
866 0
|
Java 程序员 API
枚举,注解 ,反射
枚举,注解 ,反射
55 0
|
Java 数据库
java反射机制查找类的属性并赋值
先说一下需求:最近做一个项目其中需要将前台传来的数组存到数据库,但是这个表里有15个字段,集合是不固定的,然后要把这个集合的数值赋给这个类的相应属性,然后存到数据库中。集合长度应小于等于这个类属性的个数。
274 0
【错误记录】反射时调用方法及成员报错 ( 执行反射方法 | 设置反射的成员变量 | 设置方法/成员可见性 )
【错误记录】反射时调用方法及成员报错 ( 执行反射方法 | 设置反射的成员变量 | 设置方法/成员可见性 )
157 0
|
Java 开发者
反射参数 | 学习笔记
快速学习反射参数。
|
存储 XML C#
c#利用反射实现对类中的常量进行取值和对应常量的注释
原文:c#利用反射实现对类中的常量进行取值和对应常量的注释 因为业务需要,项目中有大量的错误码,还是通过分部类编写,报错之后返回一个错误码,无处可以方便的查询, 后来发现代码中每个错误码都有定义,而且都还有注释,因此考虑通过反射实现读取然后格式化形成错误码文档方便参阅。
1787 0
|
C#
C#使用反射设置属性值
最近在Refix一个支持Excel文件导入导出功能时,发现有用到反射的相关技能。故而在网上查了些资料,通过代码调试加深下理解。 class Program { static void Main(string[] args) { ...
1336 0