java编程好多时候希望能够得到方法参数名称,这样可以避免通过类型判断,因为类型很容易重复,同时也省写注解,保持代码简洁。
java1.8新增了java.lang.reflect.Parameter类,可以通过parameter.getName()得到参数名
Method method = org.springframework.validation.DataBinder.class.getDeclaredMethod("bind", new Class[]{PropertyValues.class}); Parameter[] parameters = method.getParameters(); for (Parameter parameter : parameters) { System.out.println(parameter.getName()); }
但是编译时需要指定参数javac -parameters,不然得到的名称仍然是arg0,arg1...
早期的java版本不能从官方的反射api中读到名称,只能通过读编译后的class文件得到该方法内变量名,这里得到的变量名包含了参数名与方法体内声明的变量名,参数名会出现在该变量集的开头部分。如果是非静态方法,第一个为this。通过第三方类库如ASM、BCEL等。
Method method = org.springframework.validation.DataBinder.class.getDeclaredMethod("bind", new Class[]{PropertyValues.class}); com.sun.org.apache.bcel.internal.classfile.Method bcelMethod = Repository.lookupClass(method.getDeclaringClass()).getMethod(method); LocalVariableTable localVariableTable = bcelMethod.getLocalVariableTable(); String[] parameterNames = new String[method.getParameterTypes().length]; int offset = Modifier.isStatic(method.getModifiers()) ? 0 : 1; for (int i = 0; i < parameterNames.length; i++) { parameterNames[i] = localVariableTable.getLocalVariable(i + offset).getName(); }
如果你的工程依赖了spring,那就比较幸运,可以直接使用spring封装好的类,配置:
<bean class="org.springframework.core.DefaultParameterNameDiscoverer"/>
或
<bean class="org.springframework.core.LocalVariableTableParameterNameDiscoverer"/>
DefaultParameterNameDiscoverer增加了对jdk1.8与以下版本的分别处理,spring4新增;
LocalVariableTableParameterNameDiscoverer为spring4以下使用,统一使用第三方类库读class文件的方式
@Autowired private ParameterNameDiscoverer parameterNameDiscoverer; Method m = ... String[] names = parameterNameDiscoverer.getParameterNames(m);
参考文章:http://www.beyondjava.net/blog/reading-java-8-method-parameter-named-reflection/
相关推荐
在Java编程中,有时我们需要获取一个方法的参数名称,这对于日志记录、调试或动态代码生成等场景非常有用。然而,Java的常规运行时API并不直接提供这样的功能,因为参数名称在编译后的字节码中通常是不可见的。本文...
### Java读取SHP文件及DBF属性的关键技术解析 #### 概述 在地理信息系统(GIS)领域,Shapefile是一种常见的矢量数据格式,用于存储地理位置信息及相关属性数据。一个完整的Shapefile由多个文件组成,包括.shp、....
Java 读取串口数据是Java编程中一个重要的部分,特别是在物联网(IoT)设备通信、嵌入式系统以及工业自动化等领域。RXTX库是一个流行的开源Java库,用于实现与串行端口(COM口)和并行端口的交互。在本教程中,我们将...
若要获取方法参数的注解,可以使用`Method`对象的`getParameters()`方法,它返回一个`Parameter`对象数组。每个`Parameter`对象都有自己的`getAnnotations()`方法。 ```java Parameter[] parameters = method.get...
"Java 读取 Excel 文件" Java 读取 Excel 文件是 Java 语言中常见的操作之一,通过使用 Apache POI 库,可以轻松地读取 Excel 文件中的数据。本文将通过 ReadExcelUtil 工具类,详细介绍如何读取 Excel 文件。 ...
在Java编程环境中,读取DBF(dBase文件格式)是一种常见的需求,特别是在处理旧的数据库数据或与GIS系统交互时。DBF文件是dBase系列数据库管理系统的数据存储格式,它包含了表格结构和数据。以下是一些关于如何在...
在Java编程环境中,读取PDF文件中的内容是一个常见的任务,特别是在处理文档自动化或者数据分析时。PDF(Portable Document Format)是一种跨平台的文件格式,用于精确地保留文档的格式和内容。下面将详细介绍如何...
### Java读取超大文本文件的关键技术点 在处理大数据量的文本文件时,Java 提供了多种方式来实现高效、低内存占用的文件读取操作。本文将围绕标题“java读取超大文本文件”及其相关描述和部分代码片段进行深入解析...
java读取某个文件夹下的所有文件 很不错可以看看 不要分
这段代码通过`fis.read()`方法读取文件中的字节,如果读取成功,则返回该字节的整数值(0-255),如果到达文件末尾则返回-1。 #### 七、转换为字符串并输出 读取完成后,程序使用`new String(data, 0, i);`将字节...
java邮件读取工具类,可读取附件,功能强大,经测试可用。
java ZIP和RAR 压缩包 目录结构。 1.ant.jar 解决java自带zip不能读取中文压缩包的问题; 2.需要安装WINRAR软件,以便解压rar文件,然后获取对应目录; 3.实现在线预览压缩包目录结构的功能;
通过读取bmp格式文件的数据格式,用数组合理的读取后,重新画出该图片
最近由于项目需要,在已有java web工程里添加读取opc的接口类。通过接口将opc数据读取到本地存于oracle数据库中,供本管理系统趋势分析用。本实例在win7、xp系统本地均已调通。压缩包里有本人写的每一步详细说明操作...
Java摄像头读取二维码是一项在物联网和移动应用中常见的技术,它允许通过摄像头捕获图像,然后解析其中的二维码信息。本项目提供了一个完整的Java解决方案,包括了必要的代码和配置,以便开发者可以快速理解和实现...
在Java编程中,读取服务器硬件信息是一项重要的任务,尤其对于跨平台的应用程序来说,能够兼容Windows、Linux和Mac OS等不同操作系统是必不可少的。本文将深入探讨如何使用Java来获取这些不同系统的硬件信息。 首先...
开发过程中经常会遇到json数据的处理,而单独对json数据进行增删改并不方便,尤其是Geojson文件的处理,通过对网络资料的整理总结,下面介绍Java语言方法对json数据进行读取、添加、删除与修改操作。
在Java编程中,将数据从TXT文件读取并导入MySQL数据库是一项常见的任务,涉及到文件操作、字符串处理以及数据库交互等多个知识点。以下是对这些关键概念的详细解释: 1. **文件操作**:`FileOper.java`可能包含了对...
JAVA读取远程网页文件并保存本地 从远程URL地址获取网页文件下载到本地 这个方法可以生成静态HTML文件使用!