Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用注释处理获取静态字段值_Java_Android_Annotations_Apt_Annotation Processing - Fatal编程技术网

Java 使用注释处理获取静态字段值

Java 使用注释处理获取静态字段值,java,android,annotations,apt,annotation-processing,Java,Android,Annotations,Apt,Annotation Processing,这听起来像是一个简单的问题,但我无法让它在Android中工作 我得到的是一个简单的带注释的字段: @MyAnnotation public static final String TEXT = getText(); private static final String getText(){ return "TEXT"; } 我制作了一个注释处理器来处理@MyAnnotation,但我发现使用注释处理器不可能读取字段的值。我也尝试过反射,但是反射只在运行时可用 我需要这个字段值,以

这听起来像是一个简单的问题,但我无法让它在Android中工作

我得到的是一个简单的带注释的字段:

@MyAnnotation
public static final String TEXT = getText();

private static final String getText(){
    return "TEXT";
}
我制作了一个注释处理器来处理
@MyAnnotation
,但我发现使用注释处理器不可能读取字段的值。我也尝试过
反射
,但是反射只在运行时可用

我需要这个字段值,以便基于它生成代码


是否可以使用注释处理读取字段的值?如果没有,是否有办法实现此目的?

最终只能初始化一次。在这种情况下,您可以遵循以下代码。希望它能帮助你

@MyAnnotation
public static final String TEXT;

private static final String getText(){
    return "TEXT";
}
公共类CompileTimeAnnotationProcessor扩展了AbstractProcessor{
...
@凌驾

公共布尔过程(SetOrry,这怎么能很好地回答我的问题?
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;
 }
 ...
}