【问题标题】:Dynamic values are not supported as attributes in annotation- AspectJ Android [AOP Android]不支持动态值作为注释中的属性 - AspectJ Android [AOP Android]
【发布时间】:2016-11-17 14:09:10
【问题描述】:

我正在使用自定义注释来记录用户单击的 id。但我收到错误“属性值必须是常量”。我的代码 sn-p 如下。

mAssetId= Asset.getContentId();

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

提前致谢。有没有办法在注释中传递动态值而不是静态变量或常量。我正在为 android 使用 AspectJ 库。

【问题讨论】:

    标签: android aop aspectj


    【解决方案1】:

    无法在注解属性中指定运行时值,只能指定常量,甚至可能的类型集也仅限于几种类型:

    上述类型的基元、字符串、类、枚举、注释和数组

    根据Java 5 Language Guide - Annotations.

    【讨论】:

      【解决方案2】:

      是的,没错,我找到了一种使用注释记录运行时值的解决方案。此外,我对 anootation 进行了轻微更改以支持这一点

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

      就我而言,它有效,希望任何人都可以提供帮助。

      【讨论】:

        【解决方案3】:

        在 aspectj 原生语法中,您可以捕获所需的任何运行时变量:

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

        然后将这个 id 变量放入连接点。

        【讨论】:

        • 有任何示例程序吗?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-03
        • 1970-01-01
        • 2016-06-04
        相关资源
        最近更新 更多