`
baowp
  • 浏览: 98689 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

java读取方法参数名称,read the names of the parameters of a method

    博客分类:
  • java
阅读更多

 

       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读取dwg的预览图

    java读取dwg的预览图, 使java将autocad 的dwg文件读出预览图

    java读取shp文件代码

    ### Java读取SHP文件及DBF属性的关键技术解析 #### 概述 在地理信息系统(GIS)领域,Shapefile是一种常见的矢量数据格式,用于存储地理位置信息及相关属性数据。一个完整的Shapefile由多个文件组成,包括.shp、....

    JAVA读取USB扫描枪

    在Java编程环境中,读取USB扫描枪的数据是一项实用的技术,特别是在物流、仓储、零售等领域,用于快速录入条形码或二维码信息。以下将详细介绍如何在Java中实现这一功能。 首先,理解USB扫描枪的工作原理是关键。...

    java 读取串口数据(绝对可使用)

    Java 读取串口数据是Java编程中一个重要的部分,特别是在物联网(IoT)设备通信、嵌入式系统以及工业自动化等领域。RXTX库是一个流行的开源Java库,用于实现与串行端口(COM口)和并行端口的交互。在本教程中,我们将...

    java 通过反射获取类上注解,方法上注解,注解里的值及方法参数

    若要获取方法参数的注解,可以使用`Method`对象的`getParameters()`方法,它返回一个`Parameter`对象数组。每个`Parameter`对象都有自己的`getAnnotations()`方法。 ```java Parameter[] parameters = method.get...

    java读取图片文件流

    java读取本地图片文件获取流!java读取本地图片文件获取流!

    JAVA 读取dbf文件

    在Java编程环境中,读取DBF(dBase文件格式)是一种常见的需求,特别是在处理旧的数据库数据或与GIS系统交互时。DBF文件是dBase系列数据库管理系统的数据存储格式,它包含了表格结构和数据。以下是一些关于如何在...

    java读取超大文本文件

    ### Java读取超大文本文件的关键技术点 在处理大数据量的文本文件时,Java 提供了多种方式来实现高效、低内存占用的文件读取操作。本文将围绕标题“java读取超大文本文件”及其相关描述和部分代码片段进行深入解析...

    java读取某个文件夹下的所有文件

    java读取某个文件夹下的所有文件 很不错可以看看 不要分

    Java读取TXT文件.txt

    这段代码通过`fis.read()`方法读取文件中的字节,如果读取成功,则返回该字节的整数值(0-255),如果到达文件末尾则返回-1。 #### 七、转换为字符串并输出 读取完成后,程序使用`new String(data, 0, i);`将字节...

    用java读取修改xml文件的代码实现

    本文将详细介绍如何使用Java来读取和修改XML文件,主要涉及以下几个核心知识点: 1. **DOM解析器**: Document Object Model(DOM)是一种将XML文档转换为内存中的树形结构的方法,使得可以遍历和修改XML文件。...

    java按行读取大文件并解析入库

    在Java编程中,处理大容量文本文件是一项挑战,因为传统的逐行读取方式可能会消耗大量内存,导致程序崩溃。为了高效地处理这类问题,我们可以利用Java的`java.nio`包中的BufferedReader和FileChannel等类,实现按行...

    用java读取bmp格式图片文件

    通过读取bmp格式文件的数据格式,用数组合理的读取后,重新画出该图片

    java连接opc读取数据

    最近由于项目需要,在已有java web工程里添加读取opc的接口类。通过接口将opc数据读取到本地存于oracle数据库中,供本管理系统趋势分析用。本实例在win7、xp系统本地均已调通。压缩包里有本人写的每一步详细说明操作...

    nc文件读写 java版本

    可以通过`NetcdfFile`获取到所有变量,并通过`read()`方法读取数据。 - `Dimension`类代表NetCDF文件的维度,每个变量都关联了一组维度。 - 对于写入操作,可以使用`NetcdfFileWriter`类创建新的NetCDF文件,定义...

    java摄像头读取二维码(整个java项目)

    Java摄像头读取二维码是一项在物联网和移动应用中常见的技术,它允许通过摄像头捕获图像,然后解析其中的二维码信息。本项目提供了一个完整的Java解决方案,包括了必要的代码和配置,以便开发者可以快速理解和实现...

    java读取服务器硬件信息(windowx+linux+Mac OS)

    在Java编程中,读取服务器硬件信息是一项重要的任务,尤其对于跨平台的应用程序来说,能够兼容Windows、Linux和Mac OS等不同操作系统是必不可少的。本文将深入探讨如何使用Java来获取这些不同系统的硬件信息。 首先...

    Java读取json文件并对json数据进行读取、添加、删除与修改操作

    开发过程中经常会遇到json数据的处理,而单独对json数据进行增删改并不方便,尤其是Geojson文件的处理,通过对网络资料的整理总结,下面介绍Java语言方法对json数据进行读取、添加、删除与修改操作。

    java读取excel ,xls和xlsx

    在Java编程环境中,读取Excel文件是一项常见的任务,特别是在数据处理和分析的场景下。Excel文件主要有两种格式:`.xls`(旧版的BIFF格式,适用于Excel 2003及更早版本)和`.xlsx`(新的OpenXML格式,适用于Excel ...

Global site tag (gtag.js) - Google Analytics