代码如下:
/*
* 获取方法参数名
*/
private String[] getMethodVariableNames(String targetClass, String targetMethodName) {
Class<?> clazz = null;
try {
clazz = Class.forName(targetClass);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
ClassPool pool = ClassPool.getDefault();
pool.insertClassPath(new ClassClassPath(clazz));
CtClass cc;
CtMethod cm = null;
try {
cc = pool.get(clazz.getName());
cm = cc.getDeclaredMethod(targetMethodName);
} catch (NotFoundException e) {
e.printStackTrace();
}
// 使用javaassist的反射方法获取方法的参数名
MethodInfo methodInfo = cm.getMethodInfo();
CodeAttribute codeAttribute = methodInfo.getCodeAttribute();
LocalVariableAttribute attr = (LocalVariableAttribute) codeAttribute.getAttribute(LocalVariableAttribute.tag);
String[] variableNames = new String[0];
try {
variableNames = new String[cm.getParameterTypes().length];
} catch (NotFoundException e) {
e.printStackTrace();
}
int staticIndex = Modifier.isStatic(cm.getModifiers()) ? 0 : 1;
for (int i = 0; i < variableNames.length; i++)
variableNames[i] = attr.variableName(i + staticIndex);
return variableNames;
}
Javassist是一个开源的分析、编辑和创建Java字节码的类库。
合理应用,极为强大,值得掌握的第三方类库。
Javaassist获取方法参数名
本文介绍了一种利用Javaassist库获取Java方法参数名称的方法。通过ClassPool和CtClass等API,可以实现对字节码的操作,进而读取方法签名中的参数名。
542

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



