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