2016-04-21 3 views
0

私はクラスフィールドを初期化するために自分の注釈を作りたいと思っています。私は次のようなものが必要です:注釈で変数を初期化する

public class MyAnnotationClass{ 
    Map<String,String> myMap; 

    public String getValue(String key) { 
     return myMap.get(key); 
    } 
} 

@Retention(RetentionPolicy.RUNTIME) 
public @interface MyAnnotation { 
    String[] keys default {}; 
    String[] vlaues default {}; 
} 

public class MyClass implements MyInterface { 
    @MyAnnotation(keys={"a","b"},values={"A","B"}) 
    MyAnnotationClass myAnnotationClass; 

    public MyAnnotationClass getMyAnnotationClass() { 
     return this.myAnnotationClass; 
    } 
} 

私は変数を初期化する方法がわかりません。

ありがとう!

編集: これより少し複雑です。私はそのように初期化する必要があります。

また私たちは、あなたがよりよく助けることができるようにより多くの情報が必要プレイフレームワーク

+0

アノテーションなしで初期化してみませんか?注釈は実際にここに追加されますか? –

+0

注釈を処理するには何かが必要です。これはあなたが与えたサンプルを使って、あなた自身で行うよりはるかに複雑なようです。 – Savior

+1

あなたの質問はあまり明確ではありません。どの変数を初期化するか?初期化されていない変数がいくつかあります。初期設定にはアノテーションとは何が関係していますか? – regulus

答えて

0

を使用しています。

一般的に言えば、注釈はソースコードやコンパイルされたクラスからコンパイル中に処理することも、実行時に処理することもできます。

  1. は、クラスをコンパイルした後、あなたの変数を書き換え、ソースコードを解析します。あなたは、コンパイル処理中にそれらを初期化する必要がある場合は、あなたがいずれかを実行する必要がRetentionPolicy

    を参照してください。

  2. .classファイルを変更する場合は、ObjectWebのjavaassistまたはASMのようなライブラリが必要です。

いずれの場合も、アノテーションプロセッサを作成する必要があります。

実行時にリフレクションを使用して初期化できます。これはおそらく最も簡単な方法です。