【问题标题】:Get static FIELD value using annotation processing使用注释处理获取静态 FIELD 值
【发布时间】:2016-03-10 13:56:17
【问题描述】:
这听起来像是一个简单的问题,但我无法让它在 Android 中运行。
我得到的是一个简单的注释字段:
@MyAnnotation
public static final String TEXT = getText();
private static final String getText(){
return "TEXT";
}
我做了一个注解处理器来处理@MyAnnotation,但我发现使用注解处理器无法读取字段的值。我也试过reflection,但反射只在运行时可用 ..
我需要该字段值来基于它生成代码。
可以使用注释处理读取字段的值吗?如果没有,有什么办法可以做到这一点?
【问题讨论】:
标签:
java
android
annotations
apt
annotation-processing
【解决方案1】:
public class CompileTimeAnnotationProcessor extends AbstractProcessor{
...
@Override
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
// Only one annotation, so just use annotations.iterator().next();
Set<? extends Element> elements = roundEnv.getElementsAnnotatedWith(annotations.iterator().next());
Set<VariableElement> fields = ElementFilter.fieldsIn(elements);
for (VariableElement field : fields) {
field.getConstantValue(); //get the value of static field?
}
return true;
}
...
}
方法getConstantValue()可以帮到你。
如果这是 {@code final},则返回此变量的值
字段初始化为编译时常量。
【解决方案2】:
Final 只能初始化一次。在这种情况下,您可以遵循此代码。希望对你有帮助。
@MyAnnotation
public static final String TEXT;
private static final String getText(){
return "TEXT";
}