2016-11-17 5 views
2

私はカスタム注釈を使用して、ユーザーがクリックしたIDを記録しています。しかし、「属性値は定数でなければなりません」というエラーが表示されます。私のコードスニペットは以下の通りです。注釈の属性として動的値がサポートされていません - AspectJ Android [AOP Android]

mAssetId= Asset.getContentId(); 

    @TrackEvent("track_event") 
    @ArrayParams({@Params(key = "content_id",value = mAssetId)}) 
    protected void attributeMethod() { 
    } 

ありがとうございます。静的変数や定数ではなく、注釈に動的値を渡す方法はありますか?私はAspectJアンドロイド用ライブラリを使用しています。

答えて

0

それは、注釈の属性でのみ定数をランタイム値を指定することはできません、との可能なタイプのさえセットがいくつかの種類に制限されている:

プリミティブ、文字列、クラス、列挙、注釈、および配列前述のタイプのうち

Java 5 Language Guide - Annotationsによると、

0

はいそうです、私は、私はそれが働いていた私の場合はこの

@TrackEvent("track_event") 
    protected void attributeMethod(@Params("id") String value) { 
    } 

をサポートするためにanootationに若干の変更を行ったannotation.Alsoを使用して実行時の値を記録するための解決策を見つけた誰もがこれを助けることができると思います。

pointcut rtVar(int id): set(* int SomeClass.mAssetId) && args(id) && within(SomeClass); 

をそして、ジョインポイントにこのid変数を続行:

0

AspectJのネイティブな構文では、あなたが必要とするあらゆるランタイム変数をキャッチします。

+0

これに関するサンプルプログラムはありますか? –

関連する問題