gpt4 book ai didi

java - 访问注解处理中生成的类

转载 作者:行者123 更新时间:2023-11-30 10:26:59 24 4
gpt4 key购买 nike

我正在编写使用 Android DataBinding 的 Annotation processor,如下所示:

public @interface Bind{
int brID();
}

然后像这样使用它:

@Bind(brID = BR.someBind)
class Test{
// Some code
}

一切似乎都很好,但是当我尝试访问注释处理器中的 brID 值时,它给出了 AnnotationTypeMismatchException 表示 int 不能尽管我指定的 BR.someBindint,但仍强制转换为 BR

我知道 BR 类是在构建过程中生成的,所以我假设我的处理器恰好在未生成 BR 常量并且只有 BR 类出现。

目前我正在通过反射获取值(value)。我指定 "someBind" 值并在 BR 类的默认位置创建类 BRFinder,然后访问名为“someBind”的类字段并返回它的 int 值。但这并不是真正的最佳解决方案,因为:a) BR 类的位置可以更改,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 类上的属性的代码。

关于java - 访问注解处理中生成的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45476495/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com