开发者社区> l1ka> 正文

Java8 获取参数名及Idea/Eclipse/Maven配置(转载)

简介: 在Java8之前,代码编译为class文件后,方法参数的类型固定,但是方法名称会丢失,方法名称会变成arg0、arg1....。而现在,在Java8开始可以在class文件中保留参数名,这就给反射带来了极大的遍历。像mybatis等需要使用反射机制获取方法参数的时候就可以不用像以前一样需要使用类似于@Para之类的注解。
+关注继续查看

在Java8之前,代码编译为class文件后,方法参数的类型固定,但是方法名称会丢失,方法名称会变成arg0、arg1....。而现在,在Java8开始可以在class文件中保留参数名,这就给反射带来了极大的遍历。像mybatis等需要使用反射机制获取方法参数的时候就可以不用像以前一样需要使用类似于@Para之类的注解。


功能测试


代码参考自,点击进入


  1. 编写测试类


import java.lang.reflect.Method;
import java.lang.reflect.Parameter;
public class GetRuntimeParameterName {
    public void createUser(String name, int age, int version) {
    }
    public static void main(String[] args) throws Exception {
        for (Method m : GetRuntimeParameterName.class.getMethods()) {
            System.out.println("--------------------");
            System.out.println(" method: " + m.getName());
            System.out.println(" return: " + m.getReturnType().getName());
            for (Parameter p : m.getParameters()) {
                System.out.println("parameter:" + p.getType().getName() + ", " + p.getName());
            }
        }
    }
}


  1. 测试由于为了避免.class文件因为保留参数名而导致.class文件过大或者占用更多的内存,另外也避免有些参数(secrect/password)泄露安全信息,JVM即使时1.8默认是不会保留参数名称的。所以我们这里正常可以测试编译保留参数名和不保留参数名的情况。


    • 不保留参数名称



编译命令:


javac GetRuntimeParameterName.java


  1. 输出结果:



-------------------- 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


image.png

idea修改配置


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包时:


  1. 如果target/classes下class文件对于源码文件都没有修改,不会重新编译,直接打包classes下的class文件;


  1. 如果target/classes下class文件对于源码文件都有修改,会重新编译所有class文件,然后打包classes下的class文件;


参考

Java8获取参数名及Idea/Eclipse/Maven配置 - ChaunceyLiu刘成 - 博客园


https://www.cnblogs.com/liuchengcc/p/8318350.html




版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
如何设置阿里云服务器安全组?阿里云安全组规则详细解说
阿里云安全组设置详细图文教程(收藏起来) 阿里云服务器安全组设置规则分享,阿里云服务器安全组如何放行端口设置教程。阿里云会要求客户设置安全组,如果不设置,阿里云会指定默认的安全组。那么,这个安全组是什么呢?顾名思义,就是为了服务器安全设置的。安全组其实就是一个虚拟的防火墙,可以让用户从端口、IP的维度来筛选对应服务器的访问者,从而形成一个云上的安全域。
19648 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
28954 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,大概有三种登录方式:
13508 0
阿里云服务器安全组设置内网互通的方法
虽然0.0.0.0/0使用非常方便,但是发现很多同学使用它来做内网互通,这是有安全风险的,实例有可能会在经典网络被内网IP访问到。下面介绍一下四种安全的内网互联设置方法。 购买前请先:领取阿里云幸运券,有很多优惠,可到下文中领取。
22473 0
阿里云服务器ECS登录用户名是什么?系统不同默认账号也不同
阿里云服务器Windows系统默认用户名administrator,Linux镜像服务器用户名root
16306 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
20613 0
+关注
340
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载