2016-11-17 13 views
2

Я использую пользовательскую аннотацию для регистрации идентификатора, который нажал пользователь. Но я получаю сообщение об ошибке «Значение атрибута должно быть константой». Ниже приведен фрагмент кода.Динамические значения не поддерживаются в качестве атрибутов в аннотации-AspectJ Android [AOP Android]

mAssetId= Asset.getContentId(); 

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

Заранее спасибо. Есть ли способ передать динамические значения в аннотации, а не статические переменные или константы. Я использую AspectJ библиотека для android.

ответ

0

Это невозможно указать значение времени выполнения в атрибутах аннотаций, только константу и даже множестве возможных типов ограничиваются несколько типов:

примитивы, String, класс, Перечисление, аннотация и массивы от предшествующих типов

согласно Java 5 Language Guide - Annotations.

0

да, правильно, я нашел решение для регистрации значений времени выполнения с помощью annotation.Also я сделал небольшое изменение в anootation, чтобы поддержать эту

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

В моем случае это сработало, надеюсь, кто-нибудь может помочь в этом.

0

В родном синтаксисе AspectJ вы можете поймать любую среду выполнения переменным нужно:

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

А затем продолжить этот переменный идентификатор в joinpoint.

+0

Любая программа для этого? –