2017-02-26 2 views
1

私はApache bcel libraryを使用してJavaクラスファイルを読み込みます。これにより、呼び出しから、指定されたメソッドのローカル変数名を識別できます。Apacheでローカル変数のデータ型を識別するバイトコードエンジニアリングライブラリ(bcel)

しかし、詳細には、ローカル変数のデータ型関連の詳細は含まれていません。また、変数daat型を取得する他の方法も見つけられませんでした。ほとんど役に立たないでしょう

+0

"ローカル変数の種類関連する詳細" であります? –

+0

データ型関連の詳細(文字列、ブール値、整数など) –

+1

これらは、あなたが満足すれば、リフレクションでアクセスできます。 –

答えて

0

実際には方法があります。 method.getLocalVariableTable().getLocalVariableTable()を反復することによって、ローカル変数の署名を得ることができます。署名を取得したら、org.apache.bcel.classfile.Utilityというユーティリティクラスがあり、変換方法はUtility.signatureToString(variableSignature)です。ユーティリティクラスの

のJavadoc - https://commons.apache.org/proper/commonsbcel/apidocs/org/apache/bcel/classfile/Utility.html

例コードセグメント

転記これはクラスファイルこれはBCELコードで

public class ExampleClassFile { 
    public void testClass(int input){ 
     int intVal= 0; 
     String stringVal= "randomText"; 
     boolean booleanVal= false; 
     int []intArray = new int[2]; 
    } 
} 

を分析するために使用される例示的なJavaファイルであります上記の.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
関連する問題