当前位置:首页 > 开发 > 编程语言 > Java > 正文

java获取方法的参数名

发表于: 2015-03-12   作者:antlove   来源:转载   浏览:
摘要: reflect.ClassInformationUtil.java package reflect; import javassist.ClassPool; import javassist.CtClass; import javassist.CtMethod; import javassist.Modifier; import javassist.bytecode.CodeAtt

reflect.ClassInformationUtil.java

package reflect;

import javassist.ClassPool;
import javassist.CtClass;
import javassist.CtMethod;
import javassist.Modifier;
import javassist.bytecode.CodeAttribute;
import javassist.bytecode.LocalVariableAttribute;
import javassist.bytecode.MethodInfo;
import velocity.VelocityUtil;

public class ClassInformationUtil {

    public static void printMethodInfo(Class<?> clazz) {
        try {
            ClassPool pool = ClassPool.getDefault();
            CtClass cc = pool.get(clazz.getName());
            CtMethod[] cms = cc.getDeclaredMethods();

            for (CtMethod cm : cms) {
                System.out.println("--------------------");
                System.out.println("method name is :"+cm.getName());
                MethodInfo methodInfo = cm.getMethodInfo();
                CodeAttribute codeAttribute = methodInfo.getCodeAttribute();
                LocalVariableAttribute attr = (LocalVariableAttribute) codeAttribute.getAttribute(LocalVariableAttribute.tag);
                if (attr == null) {
                    System.err.println("attr is null");
                    continue;
                }
                int pos = Modifier.isStatic(cm.getModifiers()) ? 0 : 1;
                for (int i = 0; i < cm.getParameterTypes().length; i++) {
                    String parameterName = attr.variableName(i+pos);
                    System.out.print(parameterName+" ");
                }
                System.out.println();
            }
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}

 

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>Document</groupId>
    <artifactId>Document</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>org.javassist</groupId>
            <artifactId>javassist</artifactId>
            <version>3.15.0-GA</version>
        </dependency>
    </dependencies>
</project>

 

 

java获取方法的参数名

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
2010年5月13日 魏超 上一节:JAVA获取方法参数名的分析(一) javac和Eclipse编译出来的class文件在传
2010-5-12 魏超 关于题目 首先解释一下题目. 我们知道, Java通过反射,可以从一个类得知它有哪些方
Java 8:通过反射获取方法参数名 Published: 15 Apr 2014 Category: Java 出处:Java 8:通过反射获取
JDK 8中一个很少被提及的特性就是它可以方法参数的元信息存储到编译完的class文件中(JEP 118)。这
  一般来说,通过反射是很难获得参数名的,只能取到参数类型,因为在编译时,参数名有可能是会改
有时候我们需要在程序中获取当前运行的函数名,如何简单的做到这点呢?我们可以用getStackTrace轻松
JAVA基础--方法传参 为啥拿这个当话题? 在初学者阶段,许多童鞋都对方法传参比较迷茫,知其然不知
今天一个大意的疏忽导致公司中断服务俩个小时。只能说学spring太囫囵吞枣。横跨了俩个版本后的sprin
public class Varargs { public static void main(String[] args) { test(3,"java","C++","PHP"); }
方法的使用分两步: 第一步,定义方法 例如:下面代码定义了一个方法名为 print ,没有参数,且没有
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号