当前位置: 首页 > news >正文

java 获取方法的参数_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: createUser

return: void

parameter: java.lang.String, name

parameter: int, age

parameter: int, version

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

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

@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选项打开:

a5693dcf93ed520634388359da3b3052.png

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

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

相关文章:

  • java gui程序运行_13.JAVA之GUI编程将程序打包jar
  • java输入输出学生成绩_java从键盘输入学生成绩,找出最高分,并输出学生成绩等级。...
  • java $ 解析api_Java版抖音解析接口
  • java 10的 6次方_【Java】 剑指offer(15) 数值的整数次方
  • java 方法 返回值 int_关于java字节流类的read()方法返回值为int的思考
  • java 迭代器复制_java设计模式之迭代器模式
  • java取文件类型_java如何通过文件描述符获取文件类型
  • java pdb_当12C PDB遇上JDBC
  • java复选框添加选中事件_Java的JTable中添加JCheckBox,点击事件处理问题,求高手指点迷津...
  • java thread类是抽象类_抽象类详解
  • 摘要认证 java_摘要认证及实现HTTP digest authentication
  • ssdp java_SSDP 简单服务发现协议
  • suse tomcat mysql_suse 安装jdk和tomcat工作记录
  • javascript java 语法_JavaScript
  • java.lang.nullpointerexception:group_为什么会出现java.lang.nullpointerexception错误
  • (三)从jvm层面了解线程的启动和停止
  • 8年软件测试工程师感悟——写给还在迷茫中的朋友
  • avalon2.2的VM生成过程
  • C++类中的特殊成员函数
  • HashMap ConcurrentHashMap
  • Js基础知识(四) - js运行原理与机制
  • TypeScript实现数据结构(一)栈,队列,链表
  • vue--为什么data属性必须是一个函数
  • Webpack 4 学习01(基础配置)
  • windows下使用nginx调试简介
  • 程序员最讨厌的9句话,你可有补充?
  • 聊聊sentinel的DegradeSlot
  • 模仿 Go Sort 排序接口实现的自定义排序
  • 算法系列——算法入门之递归分而治之思想的实现
  • 我这样减少了26.5M Java内存!
  • 《TCP IP 详解卷1:协议》阅读笔记 - 第六章
  • python最赚钱的4个方向,你最心动的是哪个?
  • 关于Android全面屏虚拟导航栏的适配总结
  • ​ 全球云科技基础设施:亚马逊云科技的海外服务器网络如何演进
  • #if和#ifdef区别
  • (145)光线追踪距离场柔和阴影
  • (Java)【深基9.例1】选举学生会
  • (java)关于Thread的挂起和恢复
  • (M)unity2D敌人的创建、人物属性设置,遇敌掉血
  • (Redis使用系列) Springboot 实现Redis消息的订阅与分布 四
  • (考研湖科大教书匠计算机网络)第一章概述-第五节1:计算机网络体系结构之分层思想和举例
  • (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境
  • (转)Spring4.2.5+Hibernate4.3.11+Struts1.3.8集成方案一
  • .\OBJ\test1.axf: Error: L6230W: Ignoring --entry command. Cannot find argumen 'Reset_Handler'
  • .form文件_SSM框架文件上传篇
  • .htaccess配置重写url引擎
  • .NET MVC第五章、模型绑定获取表单数据
  • .net oracle 连接超时_Mysql连接数据库异常汇总【必收藏】
  • .Net Remoting(分离服务程序实现) - Part.3
  • .NET 中各种混淆(Obfuscation)的含义、原理、实际效果和不同级别的差异(使用 SmartAssembly)
  • .NET 中什么样的类是可使用 await 异步等待的?
  • .NET面试题解析(11)-SQL语言基础及数据库基本原理
  • .NET项目中存在多个web.config文件时的加载顺序
  • /*在DataTable中更新、删除数据*/
  • @configuration注解_2w字长文给你讲透了配置类为什么要添加 @Configuration注解