`
baowp
  • 浏览: 98765 次
  • 性别: 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实现根据方法查看方法参数名称

    在Java编程中,有时我们需要获取一个方法的参数名称,这对于日志记录、调试或动态代码生成等场景非常有用。然而,Java的常规运行时API并不直接提供这样的功能,因为参数名称在编译后的字节码中通常是不可见的。本文...

    java读取shp文件代码

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

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

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

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

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

    java读取excel

    "Java 读取 Excel 文件" Java 读取 Excel 文件是 Java 语言中常见的操作之一,通过使用 Apache POI 库,可以轻松地读取 Excel 文件中的数据。本文将通过 ReadExcelUtil 工具类,详细介绍如何读取 Excel 文件。 ...

    JAVA 读取dbf文件

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

    java 读取PDF文件中的内容

    在Java编程环境中,读取PDF文件中的内容是一个常见的任务,特别是在处理文档自动化或者数据分析时。PDF(Portable Document Format)是一种跨平台的文件格式,用于精确地保留文档的格式和内容。下面将详细介绍如何...

    java读取超大文本文件

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

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

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

    Java读取TXT文件.txt

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

    java邮件读取工具类,可读取附件,功能强大!

    java邮件读取工具类,可读取附件,功能强大,经测试可用。

    java 读取ZIP和RAR压缩包的目录结构

    java ZIP和RAR 压缩包 目录结构。 1.ant.jar 解决java自带zip不能读取中文压缩包的问题; 2.需要安装WINRAR软件,以便解压rar文件,然后获取对应目录; 3.实现在线预览压缩包目录结构的功能;

    用java读取bmp格式图片文件

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

    java连接opc读取数据

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

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

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

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

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

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

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

    java算法,从txt文件中读取数据录入mysql

    在Java编程中,将数据从TXT文件读取并导入MySQL数据库是一项常见的任务,涉及到文件操作、字符串处理以及数据库交互等多个知识点。以下是对这些关键概念的详细解释: 1. **文件操作**:`FileOper.java`可能包含了对...

    JAVA读取远程网页文件并保存本地

    JAVA读取远程网页文件并保存本地 从远程URL地址获取网页文件下载到本地 这个方法可以生成静态HTML文件使用!

Global site tag (gtag.js) - Google Analytics