【问题标题】: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";
      }
      

      【讨论】:

      • 抱歉,这怎么能准确回答我的问题?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多