本文所述内容为Java8(及以后)新增的特性,该功能对做封装和做框架的人来说很有用,对普通做业务“可能”不太能用上,下面来说一下:
先来举个例子:
@RequestMapping(value = "/test10/{id}", method = RequestMethod.GET)
public ResultVO demo10(@PathVariable String id);
需求:
在这段代码中 @PathVariable
没有给任何参数,以往我们定义注解的时候都需要设置一下,例如 @PathVariable(name = "id")
,然后在开发时,我们绝大部分情况给的参数都是和这个一样的,所以为了省掉这个 name="id"
你就需要获取 String id
中的参数名,所以我们的目的是怎么获取这个 id
。
历史:
在Java8之前,可以说你无法做到(你是不可能读取这个 id) 的,因为Java在编译的时候会将 String id
编译为 String arg0
,然而Java8中新增了这样的一个特性,你可以在编译的时候设定保留参数名称。
怎么做:
一、手工Java编译器编译
使用命令:javac -parameters xxxxx.java
,编译得到的class文件将保留参数名称。
二、开发工具怎么配置
以 Eclipse(好多工具内核都是Eclipse) 为例,设定方法如下图(我是STS截图):
Windows > Preferences > Java > Compiler > (勾选)Store infomation about method parameters (usable via reflection)
Idea 是:File > Settings > Build, Execution, Deployment > Compiler > Java Compiler > Additional command line parameters: (输入框中填写 -parameters
)
三、Maven 编译怎么配置
上面的方法都可以没有,也不能没有 maven 啊,这个才是重点,其实知道第一点后就应该知道 maven 插件怎么配置了,如下:
<!-- Compile -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.3</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<compilerArgs>
<compilerArg>-parameters</compilerArg>
</compilerArgs>
</configuration>
</plugin>
同理也是添加了编译参数 -parameter
(END)