2017-02-26 60 views
1

我正在使用Apache bcel庫來讀取java類文件。它允許從org.apache.bcel.classfile.Method.getLineNumberTable()調用中識別給定方法的局部變量名稱。在Apache字節代碼工程庫(bcel)中標識局部變量數據類型

但是細節不包括局部變量的數據類型相關細節。而且還找不到任何其他獲取可變數據類型的方法。一點幫助,將不勝感激

+0

「型的局部變量的相關細節」 ? –

+0

數據類型的相關細節(字符串,布爾值,整型等) –

+1

如果這樣可以滿足您的需求,那麼可以使用反射來訪問它們。 –

回答

0

其實有一種方法。我們可以通過迭代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()); 
    } 
} 

這些輸出結果

  1. INT輸入
  2. INT INTVAL
  3. 字符串stringVal
  4. 布爾booleanVal
  5. INT [] intArray