Java 在注释处理中访问生成的类
我正在编写使用Android数据绑定的Java 在注释处理中访问生成的类,java,android,annotations,android-databinding,Java,Android,Annotations,Android Databinding,我正在编写使用Android数据绑定的注释处理器,如下所示: public @interface Bind{ int brID(); } 然后像这样使用它: @Bind(brID = BR.someBind) class Test{ // Some code } 看起来一切正常,但当我尝试访问annotation processor中的brID值时,它给出了AnnotationTypeMismatchException,表示int无法强制转换为BR,尽管我指定了BR.some
注释处理器
,如下所示:
public @interface Bind{
int brID();
}
然后像这样使用它:
@Bind(brID = BR.someBind)
class Test{
// Some code
}
看起来一切正常,但当我尝试访问annotation processor中的brID
值时,它给出了AnnotationTypeMismatchException
,表示int
无法强制转换为BR
,尽管我指定了BR.someBind
,即int
我知道BR
类是在构建过程中生成的,所以我假设我的处理器在未生成BR
常量时恰好进行处理,并且只存在BR
类
现在我通过反射来获取价值。我指定“someBind”
值,并在BR
类的默认位置创建类BRFinder
,然后访问名为“someBind”的类字段并返回它int
值。但这并不是最好的解决方案,因为:a)类的位置可以更改,b)字段名可以由于混淆而更改,c)反射不是很快的事情
所以我的问题是:如何访问构建期间生成的值 如其他人所述,由于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类属性的代码。someBind是常数吗?@ΦXocę웃Пepeúpaツ 基本上是的<代码>数据绑定生成BR类,该类包含可使用的常量(
公共静态最终int
字段)。“someBind”是BR.someBind
@ΦXocę웃Пepeúpaツ 但这个常数背后的数字可能会改变。例如,如果您有3个绑定字段,BR将有3个常量和值(例如):1个用于BR.bind1
,2个用于BR.bind2
,3个用于BR.bind3
。然后,如果删除BR.bind1
,则所有下一个值都将递减。所以你不能总是假设BR.someBind总是有相同的值。