访问注释处理中生成的类

时间:2017-08-03 06:29:13

标签: java android annotations android-databinding

我正在编写使用Android DataBinding的Annotation processor,如下所示:

public @interface Bind{
    int brID();
}

并像这样使用它:

@Bind(brID = BR.someBind)
class Test{
    // Some code
}

一切似乎都没问题,但当我尝试在注释处理器中访问brID值时,它会AnnotationTypeMismatchException表示int无法转换为BR尽管我指定的BR.someBind int

我知道BR类是在构建过程中生成的,所以我假设我的处理器在没有生成BR常量并且只有BR类存在时才会处理。

现在我通过反思获取价值。我指定"someBind"值并在BRFinder类的默认位置创建类BR,然后访问名为“someBind”的类字段并返回int值。但这不是真正的最佳解决方案,因为:a)BR类的位置可以改变,b)字段名称可以由于混淆而改变,c)反射不是很快的事情。

所以我的问题是:如何访问构建期间生成的值?

1 个答案:

答案 0 :(得分:1)

正如其他人所提到的,由于BR ID会定期更改,因此最好在生成的代码中引用BR.property,而不是直接插入引用的值。

可能会将您的注释修改为:

public @interface Bind {
    /**
     * BR Class.
     */
    Class br();

    /**
     * BR Class Property.
    String property();
}

您的用法是:

@Bind(br = BR.class, property = "someBind")
class Test{
    // Some code
}

然后,在注释处理器中,生成访问所提供的BR类的属性的代码。