我正在使用Apache bcel库读取Java类文件。它允许从org.apache.bcel.classfile.Method.getLineNumberTable()
调用中识别给定方法的局部变量名称。
但是详细信息不包括局部变量与数据类型相关的详细信息。而且也找不到其他任何方法来获取可变数据类型。小小的帮助将不胜感激
最佳答案
其实有办法。我们可以通过迭代method.getLocalVariableTable().getLocalVariableTable()
获得局部变量签名。获得签名后,就有一个名为org.apache.bcel.classfile.Utility
的Utility类,并且有一个转换方法Utility.signatureToString(variableSignature)
。
实用程序类的Javadoc-https://commons.apache.org/proper/commonsbcel/apidocs/org/apache/bcel/classfile/Utility.html
发布示例代码段
这是示例Java文件,该类文件将用于分析
public class ExampleClassFile {
public void testClass(int input){
int intVal= 0;
String stringVal= "randomText";
boolean booleanVal= false;
int []intArray = new int[2];
}
}
这是用于分析上述.class文件的bcel代码
JavaClass javaClass = Repository.lookupClass("ExampleClassFile");
for(Method method: javaClass.getMethods()){
for(LocalVariable localVariable: method.getLocalVariableTable().getLocalVariableTable()){
System.out.println(Utility.signatureToString(localVariable.getSignature()) + " " + localVariable.getName());
}
}
这些是输出结果
整数输入
int intVal
字符串stringVal
布尔值booleanVal
int [] intArray