Java8获取参数名及Idea/Eclipse/Maven配置
在Java8之前,代码编译为class文件后,方法参数的类型固定,但是方法名称会丢失,方法名称会变成arg0、arg1....。而现在,在Java8开始可以在class文件中保留参数名,这就给反射带来了极大的遍历。像mybatis等需要使用反射机制获取方法参数的时候就可以不用像以前一样需要使用类似于
@Para之类的注解。
功能测试
编写测试类
import java.lang.reflect.Method;
import java.lang.reflect.Parameter; public class GetRuntimeParameterName {
public void createUser(String name, int age, int version) {} <span class="kw">public</span> <span class="dt">static</span> <span class="dt">void</span> <span class="fu">main</span>(String[] args) <span class="kw">throws</span> Exception {
<span class="kw">for</span> (Method m : GetRuntimeParameterName.<span class="fu">class</span>.<span class="fu">getMethods</span>()) {
System.<span class="fu">out</span>.<span class="fu">println</span>(<span class="st">"--------------------"</span>);
System.<span class="fu">out</span>.<span class="fu">println</span>(<span class="st">" method: "</span> + m.<span class="fu">getName</span>());
System.<span class="fu">out</span>.<span class="fu">println</span>(<span class="st">" return: "</span> + m.<span class="fu">getReturnType</span>().<span class="fu">getName</span>());
<span class="kw">for</span> (Parameter p : m.<span class="fu">getParameters</span>()) {
System.<span class="fu">out</span>.<span class="fu">println</span>(<span class="st">"parameter:"</span> + p.<span class="fu">getType</span>().<span class="fu">getName</span>() + <span class="st">", "</span> + p.<span class="fu">getName</span>());
}
}
}
}
- 测试
由于为了避免.class文件因为保留参数名而导致.class文件过大或者占用更多的内存,另外也避免有些参数(secrect/password)泄露安全信息,JVM即使时1.8默认是不会保留参数名称的。
所以我们这里正常可以测试编译保留参数名和不保留参数名的情况。不保留参数名称
编译命令:javac GetRuntimeParameterName.java输出结果:
--------------------
method: createUser
return: void
parameter:java.lang.String, arg0
parameter:int, arg1
parameter:int, arg2保留参数名
编译命令:javac -parameters GetRuntimeParameterName.java输出结果:
--------------------
method: createUser
return: void
parameter:java.lang.String, name
parameter:int, age
parameter:int, version
IDE和Maven开启-parameters的办法
Eclipse中开启的办法
Preferences->java->Compiler下勾选Store information about method parameters选项。
这样在使用eclipse编译java文件的时候就会将参数名称编译到class文件中。
Idea中开启的方法
File->Settings->Build,Execution,Deployment->Java Compiler下的Additional command line parameters选项中添加-parameters。

Maven中开启的办法
在pom.xml的编译插件中增加参数配置<arg>-parameters</arg>。
<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>
<arg>-parameters</arg>
</compilerArgs>
</configuration>
</plugin>
另外附上测试使用Maven install命令编译class文件的情况:
使用maven install编译生成jar包时:
- 如果target/classes下class文件对于源码文件都没有修改,不会重新编译,直接打包classes下的class文件;
- 如果target/classes下class文件对于源码文件都有修改,会重新编译所有class文件,然后打包classes下的class文件;
Java8获取参数名及Idea/Eclipse/Maven配置的更多相关文章
- springMVC源码学习之获取参数名
1.入口到参数处理调用流程 入口为spring-webmvc-4.3.18.RELEASE.jar中org.springframework.web.servlet.DispatcherServlet. ...
- eclipse Maven配置以及使用方法
简述: 现需要在Eclipse中配置Maven插件,同时安装maven应用,配置Maven环境变量,建立Maven管理的工程,并用Maven导入Gson包, 编写简易Json输出程序 步骤: 1. 首 ...
- eclipse Maven配置
①下载:http://maven.apache.org/download.cgi ②解压至:F:\Study\apache-maven-3.5.2 ③配置环境变量 变量名:M2_HOME 变量值:F: ...
- Eclipse Maven 配置setting.xml 的镜像远程仓库
1.在.m2中新建settings.xml文件 1.window-->Preferences-->Maven-->User Settings 3.点击open file 编辑将远程仓 ...
- eclipse maven 配置
http://www.cnblogs.com/little-YTMM/p/5970878.html
- 为何Spring MVC可获取到方法参数名,而MyBatis却不行?【享学Spring MVC】
每篇一句 胡适:多谈些问题,少聊些主义 前言 Spring MVC和MyBatis作为当下最为流行的两个框架,大家平时开发中都在用.如果你往深了一步去思考,你应该会有这样的疑问: 在使用Spring ...
- 使用ASM获得JAVA类方法参数名
在Java1.8之后,可以通过反射API java.lang.reflect.Executable.getParameters来获取到方法参数的元信息,(在使用编译器时加上-parameters参数, ...
- eclipse中配置maven环境
一.配置setting.xml文件 1.首先将下载好的maven打开,打开文件夹,首先就需要对maven安装目录下有个config文件夹,在文件夹下有settings.xml文件.settings里面 ...
- maven配置(安装&使用&私服)文档
1.Maven 环境搭建 Maven 是一个基于 Java 的工具,所以要做的第一件事情就是安装 JDK. 系统要求 项目 要求 JDK Maven 3.3 要求 JDK 1.7 或以上 Maven ...
随机推荐
- c#的中英文混合字符串截取 public static string SubString(string inputString, int byteLength)
/// <summary> /// c#的中英文混合字符串截取(区分中英文) /// </summary> /// <param ...
- Java 大数
How Many Fibs? Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)To ...
- 关于Webpack详述系列文章 (第二篇)
1.缩小文件搜索范围 1.1.1 include & exclude module:{ rules:[ { test:/\.js$/, use:['babel-loader?cacheDire ...
- 【Codeforces Round #453 (Div. 2) B】Coloring a Tree
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 从根节点开始. 显然它是什么颜色.就要改成对应的颜色.(如果上面已经有某个点传了值就不用改 然后往下传值. [代码] #includ ...
- [NPM] Publish npm packages using npm publish
In this lesson we will publish our package. We will first add a prepublish script that runs our buil ...
- viewPager-基本实现示例
直接看代码 package com.example.myviewpager; import android.app.Activity; import android.os.Bundle; import ...
- 开源课程管理系统(CMS):Moodle
开源课程管理系统(CMS):Moodle 一.总结 1.php开发的cms,可借鉴参考用 二.Moodle(百度) Moodle(Modular Object-Oriented Dynamic Lea ...
- Node组装启动过程
elasticsearch的启动过程是根据配置和环境组装需要的模块并启动的过程.这一过程就是通过guice注入各个功能模块并启动这些模块,从而得到一个功能完整的node.正如之前所说elasticse ...
- Oracle学习总结(10)——45 个非常有用的 Oracle 查询语句
****************************** 日期/时间 相关查询 ***************************** -- 1.获取当前月份的第一天 sele ...
- [Angular & Web] Retrieve user data from Session
Once user sign up, we store the user data inside cookie in the broswer and also keep a memory copy i ...