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读取SHP文件及DBF属性的关键技术解析 #### 概述 在地理信息系统(GIS)领域,Shapefile是一种常见的矢量数据格式,用于存储地理位置信息及相关属性数据。一个完整的Shapefile由多个文件组成,包括.shp、....
Java 读取串口数据是Java编程中一个重要的部分,特别是在物联网(IoT)设备通信、嵌入式系统以及工业自动化等领域。RXTX库是一个流行的开源Java库,用于实现与串行端口(COM口)和并行端口的交互。在本教程中,我们将...
在Java编程环境中,读取FTP(File Transfer Protocol)服务器上的文件是一项常见的任务,尤其是在Web服务器和Linux系统环境下。FTP提供了一种可靠的方式来传输文件,使得应用程序可以远程访问和操作存储在FTP服务器...
在NetCDF-Java中,可以使用`Variable`对象的`read`方法获取数据数组。 7. **处理网格数据**: GRIB2数据通常是格点数据,需要将二维数组转换为地理坐标系下的值。这通常涉及到对经纬度的索引映射和反算。 8. **...
在Java编程环境中,读取USB扫描枪的数据是一项实用的技术,特别是在物流、仓储、零售等领域,用于快速录入条形码或二维码信息。以下将详细介绍如何在Java中实现这一功能。 首先,理解USB扫描枪的工作原理是关键。...
若要获取方法参数的注解,可以使用`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来解析WSDL文档,提取其中的方法和参数。 首先,理解WSDL的基本结构是必要的。一个WSDL文件通常包含服务定义、消息定义、端点(port)定义以及绑定定义。服务定义指明了服务的名称,消息...
java读取某个文件夹下的所有文件 很不错可以看看 不要分
这段代码通过`fis.read()`方法读取文件中的字节,如果读取成功,则返回该字节的整数值(0-255),如果到达文件末尾则返回-1。 #### 七、转换为字符串并输出 读取完成后,程序使用`new String(data, 0, i);`将字节...
本文将详细介绍如何使用Java来读取和修改XML文件,主要涉及以下几个核心知识点: 1. **DOM解析器**: Document Object Model(DOM)是一种将XML文档转换为内存中的树形结构的方法,使得可以遍历和修改XML文件。...
在Java编程中,处理大容量文本文件是一项挑战,因为传统的逐行读取方式可能会消耗大量内存,导致程序崩溃。为了高效地处理这类问题,我们可以利用Java的`java.nio`包中的BufferedReader和FileChannel等类,实现按行...
java 读取txt文本文件中的数据并保存到数据库中源代码,假设txt已有格式,并以","分隔。其中的sql包需要自己去微软官网下载。
java ZIP和RAR 压缩包 目录结构。 1.ant.jar 解决java自带zip不能读取中文压缩包的问题; 2.需要安装WINRAR软件,以便解压rar文件,然后获取对应目录; 3.实现在线预览压缩包目录结构的功能;
最近由于项目需要,在已有java web工程里添加读取opc的接口类。通过接口将opc数据读取到本地存于oracle数据库中,供本管理系统趋势分析用。本实例在win7、xp系统本地均已调通。压缩包里有本人写的每一步详细说明操作...
Java摄像头读取二维码是一项在物联网和移动应用中常见的技术,它允许通过摄像头捕获图像,然后解析其中的二维码信息。本项目提供了一个完整的Java解决方案,包括了必要的代码和配置,以便开发者可以快速理解和实现...
开发过程中经常会遇到json数据的处理,而单独对json数据进行增删改并不方便,尤其是Geojson文件的处理,通过对网络资料的整理总结,下面介绍Java语言方法对json数据进行读取、添加、删除与修改操作。