私はこのようになりますAndroidのデータバインディング使用することAnnotation processor
を書いている:アクセス
public @interface Bind{
int brID();
}
そして、このようにそれを使用する:
すべてがOKようだが、とき注釈プロセッサでbrID
の値にアクセスしようとしましたが、がint
であるにもかかわらず、int
はBR
にキャストできないというAnnotationTypeMismatchException
となります。
私は、ビルドプロセス中にクラスが生成されることを知っていますので、BR
定数が生成されず、BR
クラスが存在するときにプロセッサが処理されると思います。
今のところ私はリフレクションで価値を得ています。私は"someBind"
の値を指定し、デフォルトの場所にBR
のクラスBRFinder
を作成し、そのクラスのフィールドに "someBind"という名前でアクセスし、int
という値を返します。しかし、これは実際には最良の解決策ではありません:a)BR
クラスの場所は変更できます。b)難読化によってフィールド名が変更される可能性があります。c)リフレクションは本当に速いものではありません。
私の質問は、ビルド時に生成される値にどのようにアクセスできますか?
は*** someBind ***定数ですか? –
@Φ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