本文转自廖雪峰老师的:《在Java 8中获取参数名称》

在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: createUserreturn: 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中获取参数名称相关推荐

  1. python查看函数参数,在python函数中获取参数名称列表

    Is there an easy way to be inside a python function and get a list of the parameter names? For examp ...

  2. java反射 获取方法参数名_java 反射借助 asm 获取参数名称最优雅简单的方式

    背景说明 最近写反射相关的代码,想获取对应的参数名称,却发现没有特别好的方式. jdk7 及其以前,是无法通过反射获取参数名称的. jdk8 可以获取,但是要求指定 -parameter 启动参数,限 ...

  3. 【Groovy】自定义 Xml 生成器 BuilderSupport ( 继承 BuilderSupport 抽象类 | 在 createNode 方法中获取节点名称、节点属性、节点值信息 )

    文章目录 一.继承 BuilderSupport 抽象类 二.在 createNode 方法中获取节点名称.节点属性.节点值信息 三.完整代码示例 1.MyBuilderSupport 生成器代码 2 ...

  4. Java方法中的参数太多,第6部分:方法返回

    在当前的系列文章中,我正在致力于减少调用Java方法和构造函数所需的参数数量,到目前为止,我一直专注于直接影响参数本身的方法( 自定义类型 , 参数对象 , 构建器模式 , 方法重载和方法命名 ). ...

  5. Java方法中的参数太多,第4部分:重载

    期望将过多的参数传递给Java方法的问题之一是,该方法的客户端很难确定它们是否以适当的顺序传递了适当的值. 在以前的文章中,我描述了如何使用自定义类型 , 参数对象和构建器来解决此问题. 解决此问题的 ...

  6. Java方法中的参数太多,第1部分:自定义类型

    我认为构造函数和方法中冗长的参数列表是Java开发中的另一个" 危险信号 ",就逻辑和功能而言,它们不一定是"错误的",但通常暗示当前或将来出现错误的可能性很高 ...

  7. Java方法中的参数太多,第5部分:方法命名

    在上一篇文章 (有关处理Java方法中过多参数的系列文章的 第4部分 )中,我将方法重载视为一种向客户提供需要较少参数的方法版本或构造函数的方法. 我描述了该方法的一些缺点,并建议从方法重载中摆脱出来 ...

  8. Java方法中的参数太多,第3部分:构建器模式

    在我的前两篇文章中,我研究了如何通过自定义类型和参数对象减少构造函数或方法调用所需的参数数量. 在本文中,我将讨论如何使用构建器模式来减少构造器所需的参数数量,并讨论该模式如何甚至可以帮助采用过多参数 ...

  9. Java方法中的参数太多,第2部分:参数对象

    在上一篇文章中 ,我研究了与方法和构造函数的长参数列表相关的一些问题. 在那篇文章中,我讨论了用自定义类型替换基元和内置类型以提高可读性和类型安全性. 这种方法使方法或构造函数的众多参数更具可读性,但 ...

最新文章

  1. 图像遍历反色处理,遍历多通道图片
  2. php绕后,php函数处理,绕来绕去?
  3. redis集群(主从配置)
  4. 1.16 static关键字(静态变量和静态方法)
  5. Bumblebee微服务网关之请求统一验证
  6. 03 使用T-SQL语句实现数据的添加、更新、删除测试分析 1214
  7. python binascii模块详解
  8. sublime实用快捷键 mac版
  9. OPENFILENAME结构的定义
  10. 前端学习白嫖-QQ音乐
  11. 自然资源部信息化建设总体方案摘要记录
  12. STM32串口波特率计算问题和常用波特率
  13. 学习HTML 笔记A3 :HTML标题、段落、文本格式化
  14. Python中单引号,双引号和三引号各自的作用
  15. 关于svn(客户端)在安装完成过程中所遇到的一点问题
  16. ul li列表样式css,列表ul li 专用样式
  17. oracle存储多少条数据类型,Oracle目前可以存储极大的对象,这是因为它引入了四种新的数据类型。其中哪一种大对象数据类型在数...
  18. ArcToolbox的运行结果发布为GP服务
  19. JS的除法应用 求余,取整,进一法,四舍五入
  20. html设定按钮位置示例

热门文章

  1. 面试官:HashMap有几种遍历方法?推荐使用哪种?
  2. Python:通过SNMP协议获取H3C、华为交换机的VLAN信息及ARP地址表
  3. Promethus搭建 K8S 集群节点资源监控系统
  4. Ubuntu16.04 Caffe2 编译安装步骤记录
  5. php7 有参数类型,PHP7中的可空返回类型
  6. 用vs编译openssl静态库
  7. mysql数据存储和函数_MySQL数据库——存储和函数
  8. linux 查看设备 中断号,查看powerpc linux 软件中断号 硬件中断号映射关系
  9. mysql跳过安全_Navicat连接MySQL数据库
  10. mysql断电不受影响db引擎_一次服务器断电,造成innodb引擎表(日志表)损坏的解决办法...