2017-01-31 4 views
0

から@Annovarのインスタンスにアクセスすることはできますか?名前を文字列として使用せずにパラメータを使用してフィールド注釈を取得することはできますか?

class MyClass { 

    @Anno(title="Title") Integer var; 

    void someFunc() { 
    printTitle(var); 
    } 

    public void printTitle(Integer param) { 
    // How to get to the @Anno annotation? 
    // Is it possible to get to the 'Field' where param is coming from? 
    Anno anno = param. ... .getAnnotation(Anno.class); 
    if(annotation != null) { 
     ... 
    } 
    } 
} 

私は後でリファクタリングすることは困難であるため、文字列"var"としてvarの名前を使用したくありません。

+1

提示された質問に対する答えは:いいえ、答えとして与えられます。フィールドの名前を 'String'として使用したくない場合は、フィールド名に依存するようにコードを記述しないでください。代わりにすべてのフィールドを処理します。あなたが「あまりにも賢い」何かをしようとしていたことが明らかになったら、あなたの全体のデザインを変えてください。 – Kayaman

答えて

0

Stringから注釈を取得できない場合は、String varを表すFieldオブジェクトが必要です。

void someFunc() { 
    printTitle("var"); 
    } 

    public void printTitle(String field) { 
    Anno anno = getClass().getField(field).getAnnotation(Anno.class); 
    if(annotation != null) { 
     ... 
    } 
    } 
+0

しかし、 'field'をリフレクション名として使用します。これは、実行時にのみチェック可能です。コンパイル時にチェックできるようにしたいと思います。私は私の質問でそれを明確にします。 – towi

+0

あなたはそれができないので、あなたが何を望むかは関係ありません。それは私の解決策でも何もないので、変数として 'var'を参照することはできません。クラスから' 'var ''フィールドを取り出してフィールドを取得するだけです。 – Kayaman

+0

それも私が恐れていたものです。私はいくつかの魔法/創造的なアイデアを期待していたことは認めています。それがそのままであれば、あなたの答えは受け入れられるものになります。 – towi

関連する問題