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选项打开:
注意:此功能必须把代码编译成1.8版本的class才行。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。
相关推荐
-
javascritp添加url参数将参数加入到url中
将对象参数加入到url中,如果原来url中有则覆盖 js代码 function addToUrl(obj){ var aprotocol = location.protocol; var ahost = location.host; var apath = location.pathname; var asearch = location.search; var ahash = location.hash; var result = ''; console.log(obj); var joinO
-
Java如何实现URL带请求参数(get/post)及得到get和post请求url和参数列表的方法
具体代码如下所示: public static String sendGet(String url,String param) { String result = ""; try{ String urlName = url + "?"+param;// URL U = new URL(urlName); URLConnection connection = U.openConnection(); connection.connect(); BufferedReade
-
Java方法的可变参数类型实例分析
Java方法中的可变参数类型是一个非常重要的概念,有着非常广泛的应用.本文就以实例形式对此加以分析.具体如下: 一般来说,许多Java初学者在看到下面的这段代码的时候,都会问一个问题:dealArray方法里那三个小点点是什么啊? public class TestVarArgus { public static void dealArray(int... intArray){ } public static void main(String args[]){ } } 这就是本文所要讨论的问题:
-
Java方法参数是引用调用还是值调用?
方法调用(call by) 是一个标准的计算机科学术语.方法调用根据参数传递的情况又分为值调用( call by reference ) 和引用调用( call by value ) .江湖上有很多关于这两种调用的定义 ,最通常的说法是传递值的是值调用,传递地址的是引用调用.这其实很不恰当,这种 这些说法很容易让我们联想到Java的对象参数传递是引用调用,实际上,Java的对象参数传递仍然是值调用 . 我们首先用一段代码来证实一下为什么Java的对象参数传递是值调用. public class
-
java根据方法名称取得反射方法的参数类型示例
复制代码 代码如下: /** * 根据方法名称取得反射方法的参数类型(没有考虑同名重载方法使用时注意) * @param obj 类实例 * @param methodName 方法名 * @return * @throws ClassNotFoundException */public static Class[] getMethodParamTypes(Object classInstance, String methodName) throws ClassNotF
-
java解析出url请求的路径和参数键值对类(解析出url请求的路径,包括页面)
复制代码 代码如下: package RequestPackage; import java.util.HashMap; import java.util.Map; public class CRequest { /** * 解析出url请求的路径,包括页面 * @param strURL url地址 * @return url路径 */ public static String UrlPage(String strURL) { String strPage=null; String[] arr
-
java向多线程中传递参数的三种方法详细介绍
在传统的同步开发模式下,当我们调用一个函数时,通过这个函数的参数将数据传入,并通过这个函数的返回值来返回最终的计算结果.但在多线程的异步开发模式下,数据的传递和返回和同步开发模式有很大的区别.由于线程的运行和结束是不可预料的,因此,在传递和返回数据时就无法象函数一样通过函数参数和return语句来返回数据.本文就以上原因介绍了几种用于向线程传递数据的方法,在下一篇文章中将介绍从线程中返回数据的方法. 欲先取之,必先予之.一般在使用线程时都需要有一些初始化数据,然后线程利用这些数据进行加工处理,并
-
Java获取代码中方法参数名信息的方法
前言 大家都知道随着java8的使用,在相应的方法签名中增加了新的对象Parameter,用于表示特定的参数信息,通过它的getName可以获取相应的参数名.即像在代码中编写的,如命名为username,那么在前台进行传参时,即不需要再编写如@Parameter("username")类的注解,而直接就能进行按名映射. 如下的代码参考所示: public class T { private interface T2 { void method(String username, Stri
-
java eclipse 启动参数
在参考了一些资料之后,我总结了一些比较常用的启动时Command Arguments,如果有不正确的地方希望大家予以指出. -arch [processor architecture] 描述:指定所使用的处理器的类别 举例:eclipse -arch x86或eclipse -arch sparc -application [id] 描述:指定要运行的应用,id为扩展org.eclipse.core.applications扩展点的插件id加扩展id 举例:例如有个插件id为edu.sdu.ap
-
Java 8中如何获取参数名称的方法示例
前言 在Java 8之前的版本,代码编译为class文件后,方法参数的类型是固定的,但参数名称却丢失了,这和动态语言严重依赖参数名称形成了鲜明对比.现在,Java 8开始在class文件中保留参数名,给反射带来了极大的便利. 示例: public class GetRuntimeParameterName { public void createUser(String name, int age, int version) { // } public static void main(Strin
-
Java使用正则表达式匹配获取链接地址的方法示例
本文实例讲述了Java使用正则表达式匹配获取链接地址的方法.分享给大家供大家参考,具体如下: 获取页面中字符串的url地址我们都会使用正则表达式来匹配获取了,下面我来给大家总结几个匹配获取链接地址示例. 1.正则表达式中Matcher中find()方法的应用. 2.String对象中的 replaceAll(String regex,String replacement) 方法的使用.通过这个方法去除了不必要的字符串,从而得到了需要的网址和链接文字 例1.超简单的 String content
-
Java实现批量修改txt文件名称的方法示例
本文实例讲述了Java实现批量修改txt文件名称的方法.分享给大家供大家参考,具体如下: 最近在做特征选择的实验时,需要批量修改一下文件名称,在这里做一下记录. package com.cqu.experiment; import java.io.File; /** * @author 作者: E-mail:@126.com * @version 创建时间:2016年12月26日 下午3:02:01 类说明 */ public class RenameTxt { public static vo
-
Android中Java根据文件头获取文件类型的方法
本文实例讲述了Android中Java根据文件头获取文件类型的方法.分享给大家供大家参考,具体如下: 前面讲过Android系统内部的MediaFile类来获取文件类型的办法,这个类主要是根据文件的扩展名来判断,其准确性不是很好.具体可查看Android系统使用MediaFile类判断音频文件类型.其实,获取文件类型最好的办法便是根据文件头信息来判断.下面贴出相关代码: public class FileType { public static final HashMap<String, Str
-
request请求获取参数的实现方法(post和get两种方式)
提交表单代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <h1>测试请求参数</h1> <!-- 注意href和action都是写的完整的名称:项目名和资源路径名 --> <!-- 下面一句
-
JAVA8 stream中三个参数的reduce方法对List进行分组统计操作
背景 平时在编写前端代码时,习惯使用lodash来编写'野生'的JavaScript; lodash提供来一套完整的API对JS对象(Array,Object,Collection等)进行操作,这其中就包括_.groupBy 和 _.reduce,即分组和'聚合'(reduce不知道该怎么翻译合适). 使用这些'野生'的API能够极大的提高我本人编写JS代码的效率.而JAVA8开始支持stream和lambda表达式,这些和lodash的API有很多类似的功能.因此我在熟悉lodash的前提下尝
-
Java链表中添加元素的原理与实现方法详解
本文实例讲述了Java链表中添加元素的原理与实现方法.分享给大家供大家参考,具体如下: 1.链表中头节点的引入 1.1基本的链表结构: 1.2对于链表来说,若想访问链表中每个节点则需要把链表的头存起来,假如链表的头节点为head,指向链表中第一个节点,如图: 1.3使用代码表示此时的链表 //定义头节点 private Node head; //节点个数 private int size; //无参数构造函数 public LinkedList() { head = null; size = 0
-
SpringMVC中RequestContextHolder获取请求信息的方法
RequestContextHolder的作用是: 在Service层获取获取request和response信息 代码示例: ServletRequestAttributes attrs = (ServletRequestAttributes)RequestContextHolder.getRequestAttributes(); HttpServletRequest request = attrs.getRequest(); 源码分析: 定义了两个ThreadLocal变量用来存储Reque
-
详解Java泛型中类型擦除问题的解决方法
以前就了解过Java泛型的实现是不完整的,最近在做一些代码重构的时候遇到一些Java泛型类型擦除的问题,简单的来说,Java泛型中所指定的类型在编译时会将其去除,因此List 和 List 在编译成字节码的时候实际上是一样的.因此java泛型只能做到编译期检查的功能,运行期间就不能保证类型安全.我最近遇到的一个问题如下: 假设有两个bean类 /** Test. */ @Data @NoArgsConstructor @AllArgsConstructor public static class
-
C#中Winform获取文件路径的方法实例小结
本文实例讲述了C#中Winform获取文件路径的方法.分享给大家供大家参考.具体如下: 获取文件名方法: 用System.IO.Path.GetFileName和System.IO.Path.GetFileNameWithoutExtension(无扩展名)的方法 获取文件路径方法: //获取当前进程的完整路径,包含文件名(进程名). string str = this.GetType().Assembly.Location; result: X:\xxx\xxx\xxx.exe //(.exe
随机推荐
- java sqlserver text 类型字段读取方法
- mybatis 中 foreach collection的用法小结(三种)
- asp.net 验证字符串是否为纯数字检测函数
- 用js实现的自定义的对话框的实现代码
- Global.asax取物理路径/取绝对路径具体方法
- php中将数组转成字符串并保存到数据库中的函数代码
- python实现给数组按片赋值的方法
- MySql5.7.11编译安装及修改root密码的方法小结
- JavaScript四种调用模式和this示例介绍
- JavaScript 字符串操作的几种常见方法
- JQuery中阻止事件冒泡几种方式及其区别介绍
- 608769M.BMP等病毒的清除技巧
- Shell实现强制释放内存脚本分享
- Python实现抓取网页并且解析的实例
- Linux 详解 /var/log/xferlog的各个字段解析
- php动态生成版权所有信息的方法
- php+ajax实现文章自动保存的方法
- Vue 动态设置路由参数的案例分析
- Ubuntu 18.04 LTS中配置IP地址的完整步骤
- SpringBoot基于HttpMessageConverter实现全局日期格式化