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反射和javassist库来获取类的方法信息并打印其参数名称的工具类实现。通过ClassInformationUtil类的printMethodInfo方法,可以详细展示指定类的所有声明方法及其局部变量属性。

被折叠的 条评论
为什么被折叠?



