我正在使用Apache bcel库来读取java类文件。它允许从org.apache.bcel.classfile.Method.getLineNumberTable()
调用中识别给定方法的局部变量名称。
但细节不包括局部变量的数据类型相关细节。而且也找不到任何其他获取变量daat类型的方法。很少得到赞赏
答案 0 :(得分:2)
实际上还有一种方法。我们可以通过迭代method.getLocalVariableTable().getLocalVariableTable()
来获取局部变量签名。获得签名后,会有一个名为org.apache.bcel.classfile.Utility
的实用工具类,并且存在转换方法Utility.signatureToString(variableSignature)
。
Utility类的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());
}
}
这些是输出结果