java获取方法的参数名

阅读更多

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



    4.0.0

    Document
    Document
    1.0-SNAPSHOT

    
        
            org.javassist
            javassist
            3.15.0-GA
        
    

 

 

你可能感兴趣的:(java,jdk,reflect,method,parameter)