zoukankan      html  css  js  c++  java
  • 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局部变量表

  • 相关阅读:
    观后感
    用户故事排球教练助手
    本周工作量
    本周个人作业
    个人工作量
    个人作业
    产品计划总结
    典型用户和场景总结
    排球比赛计分规则
    PowerShell ISE:Windows Server 2008 R2默认不安装
  • 原文地址:https://www.cnblogs.com/strongmore/p/15059366.html
Copyright © 2011-2022 走看看