我正在使用Apache bcel庫來讀取java類文件。它允許從org.apache.bcel.classfile.Method.getLineNumberTable()
調用中識別給定方法的局部變量名稱。在Apache字節代碼工程庫(bcel)中標識局部變量數據類型
但是細節不包括局部變量的數據類型相關細節。而且還找不到任何其他獲取可變數據類型的方法。一點幫助,將不勝感激
我正在使用Apache bcel庫來讀取java類文件。它允許從org.apache.bcel.classfile.Method.getLineNumberTable()
調用中識別給定方法的局部變量名稱。在Apache字節代碼工程庫(bcel)中標識局部變量數據類型
但是細節不包括局部變量的數據類型相關細節。而且還找不到任何其他獲取可變數據類型的方法。一點幫助,將不勝感激
其實有一種方法。我們可以通過迭代method.getLocalVariableTable().getLocalVariableTable()
來獲得本地變量簽名。一旦我們有了簽名,就有一個Utility類叫做org.apache.bcel.classfile.Utility
,並且有一個轉換方法Utility.signatureToString(variableSignature)
。
實用類的Javadoc - https://commons.apache.org/proper/commonsbcel/apidocs/org/apache/bcel/classfile/Utility.html
過賬的示例代碼段
這是該類文件將被用於分析
public class ExampleClassFile {
public void testClass(int input){
int intVal= 0;
String stringVal= "randomText";
boolean booleanVal= false;
int []intArray = new int[2];
}
}
此示例中的java文件是BCEL代碼用於分析上述.class文件
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());
}
}
這些輸出結果
「型的局部變量的相關細節」 ? –
數據類型的相關細節(字符串,布爾值,整型等) –
如果這樣可以滿足您的需求,那麼可以使用反射來訪問它們。 –