実行時にメソッドのパラメータ名を取得する必要があります。これを達成する方法はありますか?インタフェースメソッドのパラメータ名を取得
私はSpringクラスのLocalVariableTableParameterNameDiscoverer
を使ってみました。しかし、それはインターフェイスではなくクラスに対してのみ機能します。
実行時にメソッドのパラメータ名を取得する必要があります。これを達成する方法はありますか?インタフェースメソッドのパラメータ名を取得
私はSpringクラスのLocalVariableTableParameterNameDiscoverer
を使ってみました。しかし、それはインターフェイスではなくクラスに対してのみ機能します。
パラメータ名を取得する唯一の方法は、-g:vars
オプションを使用してソースコードをコンパイルすることです。これにより、クラスファイルにLocalVariableTable
属性が生成されます。これは一般に最適化のために削除されます。例えば
public class Example {
public int plus(int a){
int b = 1;
return a + b;
}
}
LocalVariableTable次のようにこれはLocalVariableTable
を作成します。
Start Length Slot Name Signature
0 6 0 this LExample;
0 6 1 a I
2 4 2 b I
LocalVariableTable
がASMような任意のバイトコードインスツルメンテーション・ライブラリーを使用して読み取ることができるのまたはJavassist。
これはJavaインターフェイスでも機能しますか? –
私は自分自身を試していませんが、コンパイルされたときにインターフェイスは.classファイルに変換されます。その理由は、Javaクラスファイルの.classと一貫している必要があります。 – Santosh
これが本当に可能な唯一の方法は、 '.java'ファイルを解析することです。 – Obicere
ここに何か似ている、あなたが必要とするかもしれない:http://stackoverflow.com/questions/2237803/can-i-obtain-method-parameter-name-using-java-reflection – Jlewis071
私が知る限り、それはJava 8のリフレクションで可能です。そうでなければ、ライブラリを操作するbytcodeを使用しなければなりません。 –