java8中新增编译参数parameters入门
2021/7/26 20:37:28
本文主要是介绍java8中新增编译参数parameters入门,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
前言
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设置编译参数
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,会默认开启。
我们也可以查看最终生效的POM文件来确认这一点
看一个SpringMVC中使用到的例子
@GetMapping(value = "/{name}") public String test(@PathVariable String name);
SpringMVC解析请求参数时,就会使用到这个特性。
主要使用到了DefaultParameterNameDiscoverer,这是一个组合类。
先通过StandardReflectionParameterNameDiscoverer获取,顾名思义通过反射来获取参数名称,如果我们在编译时没有添加这个编译参数,再通过LocalVariableTableParameterNameDiscoverer来获取,这个涉及到一个 局部变量表 的概念,内部是通过ASM(一个java字节码操作框架)来实现的。
参考
Java编译保留方法参数名称
启用maven_启用 parameters 编译选项简化 mybatis @Param 注解重复问题
How to compile Spring Boot applications with Java 8 --parameter flag
JAVA局部变量表
这篇关于java8中新增编译参数parameters入门的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-19JAVA分布式id教程:轻松入门与实践
- 2024-11-19Java高并发教程:入门与实践指南
- 2024-11-19JAVA高并发直播教程:新手入门指南
- 2024-11-19Java高并发直播教程:入门与实践指南
- 2024-11-19Java微服务教程:初学者快速入门指南
- 2024-11-19JAVA微服务教程:新手入门的详细指南
- 2024-11-19Java微服务教程:从零开始搭建你的第一个微服务应用
- 2024-11-19Java项目开发教程:初学者必备指南
- 2024-11-19Java项目开发教程:新手快速入门指南
- 2024-11-19Java项目开发教程:零基础入门到实战