java8获取参数名称API

9人阅读 评论(0) 收藏 举报
分类:

在Java 8之前的版本,代码编译为class文件后,方法参数的类型是固定的,但参数名称却丢失了,这和动态语言严重依赖参数名称形成了鲜明对比。现在,Java 8开始在class文件中保留参数名,给反射带来了极大的便利。

示例:

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());
            }
        }
    }
}

Method.getParameters为1.8新增方法,可以获取参数信息,包括参数名称。

上述代码输出的createUser参数如下:

   method: createUser
   return: void
parameter: java.lang.String, name
parameter: int, age
parameter: int, version

参数名称被编译进了class文件,替代了早期版本里无意义的arg0arg1……

对于很多依赖参数名的框架,可进一步简化代码:

@Path("/groups/:groupid/:userid")
public User getUser(String groupid, String userid) {
    ...
}

没有参数名的时代,得加上注解:

@Path("/groups/:groupid/:userid")
public User getUser(@Param("groupid") String groupid, @Param("userid") String userid) {
    ...
}

遗憾的是,保留参数名这一选项由编译开关javac -parameters打开,默认是关闭的。

在Eclipse中,可以通过Compiler选项打开:


注意此功能必须把代码编译成1.8版本的class才行。

查看评论

Java 8中获取参数名称

在Java 8之前的版本,代码编译为class文件后,方法参数的类型是固定的,但参数名称却丢失了,这和动态语言严重依赖参数名称形成了鲜明对比。现在,Java 8开始在class文件中保留参数名,给反射...
  • qfycc92
  • qfycc92
  • 2015年02月02日 14:12
  • 665

使用Java8获取方法参数名称

在Java 8之前的版本,代码编译为class文件后,方法参数的类型是固定的,但参数名称却丢失了,这和动态语言严重依赖参数名称形成了鲜明对比。现在,Java 8开始在class文件中保留参数名,给反射...
  • qq_32331073
  • qq_32331073
  • 2017年12月02日 12:13
  • 323

intellij idea java8反射获取方法参数名

java8中的新特性可以直接通过反射获取方法的参数名, //通过类名获取class Class clazz=Class.forName(className); //通过方法名获取对...
  • Royal_lr
  • Royal_lr
  • 2016年08月22日 20:29
  • 2934

JAVA8中反射获取参数名称

javac -parameters  指定参数才可以将参数信息编译到class中 eclipse中默认是不加参数的,需要在运行的VM arguments中添加-D-parameters...
  • u010889990
  • u010889990
  • 2015年06月20日 22:09
  • 425

java如何获取方法参数名

在java中,可以通过反射获取到类、字段、方法签名等相关的信息,像方法名、返回值类型、参数类型、泛型类型参数等,但是不能够获取方法的参数名。在实际开发场景中,有时需要根据方法的参数名做一些操作,比如像...
  • mhmyqn
  • mhmyqn
  • 2015年08月05日 11:33
  • 23522

Java获取函数参数名称的几种方法

Java获取函数参数名称的几种方法
  • wwwwenl
  • wwwwenl
  • 2016年12月01日 21:35
  • 8681

Java——通过反射获取函数参数名称

通过javassit获取参见 http://blog.csdn.net/viviju1989/article/details/8529453 这篇文章的方法一,实现比较麻烦,就不说了。通过spring...
  • lzx_2011
  • lzx_2011
  • 2017年04月30日 22:53
  • 4714

JavaScript获取函数参数名称

在webhak.com浏览时看到一个可以通过javaScript获取函数参数名称的方法,觉得它用正则很巧妙,阅读了下,先记下,说不定日后有用。 function getArgs(func){ /...
  • angeljsl
  • angeljsl
  • 2015年10月27日 19:22
  • 988

SpringAOP中,获取参数名称

由于项目中打印日志的需要,研究了一下在aop中,获取参数名称的方法。 1、jdk1,8中,比较简单,直接通过joinPoint中的getSignature()方法即可获取 Signature si...
  • ThinkingT_T
  • ThinkingT_T
  • 2017年04月02日 13:07
  • 6079

详解Java8特性之新的日期时间 API

吐槽Java 8 提供了一套新的日期时间 API,为什么要这么干呢。因在旧版的 Java 中,日期时间 API 存在很多问题,比如说线程安全问题了, java.util.Date 是非线程安全的,所有...
  • TimHeath
  • TimHeath
  • 2017年05月07日 14:09
  • 2797
    个人资料
    等级:
    访问量: 1万+
    积分: 421
    排名: 11万+