2013-08-12 8 views
5

実行時にメソッドのパラメータ名を取得する必要があります。これを達成する方法はありますか?インタフェースメソッドのパラメータ名を取得

私はSpringクラスのLocalVariableTableParameterNameDiscovererを使ってみました。しかし、それはインターフェイスではなくクラスに対してのみ機能します。

+2

これが本当に可能な唯一の方法は、 '.java'ファイルを解析することです。 – Obicere

+0

ここに何か似ている、あなたが必要とするかもしれない:http://stackoverflow.com/questions/2237803/can-i-obtain-method-parameter-name-using-java-reflection – Jlewis071

+0

私が知る限り、それはJava 8のリフレクションで可能です。そうでなければ、ライブラリを操作するbytcodeを使用しなければなりません。 –

答えて

2

パラメータ名を取得する唯一の方法は、-g:varsオプションを使用してソースコードをコンパイルすることです。これにより、クラスファイルにLocalVariableTable属性が生成されます。これは一般に最適化のために削除されます。例えば

:(taken from here

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 

LocalVariableTableASMような任意のバイトコードインスツルメンテーション・ライブラリーを使用して読み取ることができるのまたはJavassist

+0

これはJavaインターフェイスでも機能しますか? –

+0

私は自分自身を試していませんが、コンパイルされたときにインターフェイスは.classファイルに変換されます。その理由は、Javaクラスファイルの.classと一貫している必要があります。 – Santosh

関連する問題