JDK8新特性:编译器保留方法参数名字
2017-01-12 13:19
417 查看
在JDK8之前,java编译器会忽略我们编写代码时候设定的参数名,比如在mybatis框架中,我们可以使用@Param注解来让mybatis知道参数名。
很长一段时间里,Java程序员一直在发明不同的方式使得方法参数的名字能保留在Java字节码中,并且能够在运行时获取它们(比如Paranamer类库)。最终,在Java 8中把这个强烈要求的功能添加到语言层面(通过反射API与Parameter.getName()方法)与字节码文件(通过新版的javac的–parameters选项)中。
如果不使用–parameters参数来编译这个类,然后运行这个类,会得到下面的输出:
如果使用–parameters参数来编译这个类,参数的真实名字将会显示出来:
如果是maven项目,可以配置maven编译插件:
public interface DemoMapper { List<Card> getCardList(@Param("cardIds") List<Integer> cardIds); Card getCard(@Param("cardId")int cardId); }
很长一段时间里,Java程序员一直在发明不同的方式使得方法参数的名字能保留在Java字节码中,并且能够在运行时获取它们(比如Paranamer类库)。最终,在Java 8中把这个强烈要求的功能添加到语言层面(通过反射API与Parameter.getName()方法)与字节码文件(通过新版的javac的–parameters选项)中。
public class ParameterNames { public static void main(String[] args) throws Exception { Method method = ParameterNames.class.getMethod( "main", String[].class ); for( final Parameter parameter: method.getParameters() ) { System.out.println("isNamePresent: " + parameter.isNamePresent()); System.out.println( "Parameter: " + parameter.getName() ); } } }
如果不使用–parameters参数来编译这个类,然后运行这个类,会得到下面的输出:
isNamePresent: false Parameter: arg0
如果使用–parameters参数来编译这个类,参数的真实名字将会显示出来:
isNamePresent: true Parameter: args
如果是maven项目,可以配置maven编译插件:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> <configuration> <compilerArgument>-parameters</compilerArgument> <encoding>UTF-8</encoding> <source>1.8</source> <target>1.8</target> </configuration> </plugin>
相关文章推荐
- jdk 1.5新特性--可变参数
- JDK1.4新特性--参数选择API
- 黑马程序员---集合框架工具类Collections,数组工具类Arrays常见方法以及1.5版本新特性(高级for,可变参数和静态导入)
- 在函数的重载中方法的返回值类型和参数的名字不参加比较
- jdk 1.5新特性——可变参数、Foreach
- JDK6新特性,JAVA获得机器MAC地址的方法
- JDK1.5新增特性之VariableParameter可变参数方法
- 编译器错误消息: CS1061: “ASP.default_aspx”不包含“Button1_Click”的定义,并且找不到可接受类型为“ASP.default_aspx”的第一个参数的扩展方法“Bu
- [C#]Attribute特性(2)——方法的特性及特性参数
- 默认参数是C++的特性,C中不支持 —— 在C中通过默认参数列表使用默认参数的方法
- JDK 1.5 新特性——可变参数
- java 5 新特性——可变参数方法
- Java JDK5.0的新特性 增强for循环 自动装箱/拆箱 可变参数 静态导入
- 心得24--JDK新特性8-反射3-Method方法.doc
- java 5 新特性——可变参数方法
- jdk1.5.0 新特性---可变参数
- 心得19--JDK新特性-可变参数、枚举
- JAVA JDK1.5新特性<静态带入、可变参数、增强For循环、自动装箱及自动拆箱>
- 部分JDK1.5新特性,一些类(高级for,可变参数,静态导入,System,Runtime,Date,Math)
- C#方法笔记一:C#4.0新特性:命名参数和可选参数