我正在编写使用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)反射不是很快的事情。
所以我的问题是:如何访问构建期间生成的值?
答案 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类的属性的代码。