2
我写Annotation processor
使用Android的数据绑定,看起来像这样:访问生成的类中的注释处理
public @interface Bind{
int brID();
}
而且使用这样的:
一切似乎都OK,但是当我试图访问brID
它注释处理器中的值AnnotationTypeMismatchException
,它说int
无法投射到BR
,尽管我指定BR.someBind
即int
。
我知道BR
类是在构建过程中生成的,所以我假设我的处理器恰好在BR
常量没有生成时处理,并且只有BR
类存在。
现在我正在通过反射访问价值。我指定"someBind"
值并在默认位置BR
类中创建类BRFinder
,然后使用名称“someBind”访问该类字段并返回值int
值。但是这不是最好的解决方案,因为:a)BR
类的位置可以改变,b)字段名称可以由于混淆而改变,c)反射并不是真正快速的事情。
所以我的问题是:如何访问构建期间生成的值?
是***一些常量? –
@ΦXocę웃Пepeúpaツ基本上可以。 'DataBinding'用常量('public static final int'字段)生成可以使用的BR类。并且“someBind”是'BR.someBind' – Ekalips
@ΦXocę웃Пepeúpaз但是这个常量的数字可能会改变。例如,如果您有3个绑定字段,BR将为您使用3个常量(例如):BR.bind1为1,BR.bind2为2,BR.bind3为3。然后如果你删除了'BR.bind1',所有下一个值将会减少。所以你不能总是假设BR.someBind将始终具有相同的值。 – Ekalips