java8中新增编译参数parameters入门

摘要:
前言java8添加了一个编译参数parameters,它允许我们在运行时获取方法参数名。我们还可以检查最终有效的POM文件以确认这一点。参见Spring MVC中使用的示例@GetMappingpublicStringtest;Spring MVC在解析请求参数时使用此特性。主要使用DefaultParameterNameDiscover,这是一个复合类。

前言

java8新增了一个编译参数-parameters,可以让我们在运行期获取方法参数名称。

简单使用

import java.lang.reflect.Method;
import java.lang.reflect.Parameter;

public class TestParameter {
 public static void main(String[] args) throws Exception {
  Method testMethod = TestParameter.class.getDeclaredMethod("test", int.class);
  for (Parameter parameter : testMethod.getParameters()) {
      System.out.println(parameter.getName());
  }
 }

 private static void test(int num) {
  
 }
}

默认编译

javac TestParameter.java

运行结果为

arg0

添加编译参数编译

javac -parameters TestParameter.java

运行结果为

num

IDEA

IDEA设置编译参数

java8中新增编译参数parameters入门第1张

maven

maven设置编译参数,版本3.6.2之前

<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-compiler-plugin</artifactId>
   <version>3.6.0</version>
   <configuration>
      <compilerArgs>-parameters</compilerArgs>
   </configuration>
</plugin>

版本3.6.2及之后

<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-compiler-plugin</artifactId>
   <version>3.6.0</version>
   <configuration>
      <parameters>true</parameters>
   </configuration>
</plugin>

Spring框架

SpringBoot项目如果继承自spring-boot-starter-parent,会默认开启。

java8中新增编译参数parameters入门第2张

我们也可以查看最终生效的POM文件来确认这一点

java8中新增编译参数parameters入门第3张

看一个SpringMVC中使用到的例子

@GetMapping(value = "/{name}")
public String test(@PathVariable String name);

SpringMVC解析请求参数时,就会使用到这个特性。

java8中新增编译参数parameters入门第4张java8中新增编译参数parameters入门第5张

主要使用到了DefaultParameterNameDiscoverer,这是一个组合类。

java8中新增编译参数parameters入门第6张

先通过StandardReflectionParameterNameDiscoverer获取,顾名思义通过反射来获取参数名称,如果我们在编译时没有添加这个编译参数,再通过LocalVariableTableParameterNameDiscoverer来获取,这个涉及到一个 局部变量表 的概念,内部是通过ASM(一个java字节码操作框架)来实现的。

参考

Java编译保留方法参数名称
启用maven_启用 parameters 编译选项简化 mybatis @Param 注解重复问题
How to compile Spring Boot applications with Java 8 --parameter flag
JAVA局部变量表

免责声明:文章转载自《java8中新增编译参数parameters入门》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇VUE Flask登录的初探-JWT的探索php中上传图片,原生代码下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

解决cookie跨域访问

如果用户在登录(记录用户上下文信息)后在浏览器客户端上写入cookie,则只能访问与创建cookie的页面相同目录或创建cookie页面的子目录中的网页。这是因为cookie可以由其路径下的页面访问。然后,如果您想在域a中生成一个可以被域a和域B访问的cookie,则需要将cookie的域设置为.test.com;...

C# 获取枚举 Enum 变量值的 Description 属性

如何在C#中读取枚举值的描述属性?有以下枚举:123456 public enum enum Langage{[System.ComponentModel.Description]Chinese,English}我们希望得到的是中文中的“Chinese”描述。123456789 publicstringGetEnumDescription{stringstr...

Android开发实战——记账本(4)

父母亲mCostBeanList.remove(位置);builder.setNegativeButton(“取消”;builder.create().show();returntrue;}returnsuper.onOptionsItemSelected(项);...

【01】如何在XMind中排列自由主题

如何在XMind中安排免费主题。在XMind思维导图软件中,用户可以根据需要添加免费主题。然而,由于自由主题的灵活性,它并不整洁,与需要控制界面有序排列的用户相比,这会造成一定的麻烦。首先选择要组织的所有免费主题,单击,然后在下拉框中选择以安排免费主题。有六种排列方式:左对齐、垂直居中、右对齐、顶部对齐、水平居中和底部对齐。...

plsql 导出查询结果

单击青色按钮,表示所查询的所有数据都将导出到指定文件,而不仅仅是以下列表中显示的数据行;无需单击“获取最后一页”按钮。注意:选择导出到excel文件时,需要注意默认导出为*。xlsx格式。您可以选择*。xls格式,但*。xls格式只能容纳65536行数据。如果要导出的数据超过最大值,则必须更改为*。xlsx格式!如果您仍然使用此格式,后面的数据将覆盖以前的数...

Java成长之路

如何学习如何从初级Java程序员成长为合格的架构师,或者一个合格的架构师应该拥有什么样的技术知识体系,这不仅是一个刚进入职场的初级程序员,也是一个工作了三年或五年后感到困惑的老程序员面临的问题。首先必须明确Java的突出之处和不同之处。...