注释-生成时读取元素值

| 是否可以在构建时读取注释元素的值?例如,如果我定义了以下注释:
public @interface State {
    String stage();
}
并且我在类中注释了一个方法,如下所示:
public class Foo {
   @State(stage = \"build\")
   public String doSomething() {
      return \"doing something\";
   }
}
如何在构建时在注释处理器中读取@State注释元素\'stage \'的值?我有一个如下构建的处理器:
@SupportedAnnotationTypes(value = {\"State\"})
@SupportedSourceVersion(SourceVersion.RELEASE_6)
public class StageProcessor extends AbstractProcessor { 
    @Override
    public boolean process(Set<? extends TypeElement> elementTypes,
            RoundEnvironment roundEnv) {
        for (Element element : roundEnv.getRootElements()) {
               // ... logic to read the value of element \'stage\' from
               // annotation \'State\' in here.
        }
        return true;
    }
}
    
已邀请:
        这不是最佳答案,因为我自己还没有做,但是看到已经3个小时了,我会尽力而为。   注释处理概述      除非注释处理是   使用-proc:none选项禁用,   编译器搜索任何   注释处理器   可用。搜索路径可以是   用-processorpath指定   选项;如果没有给出,则用户   使用类路径。处理器是   通过服务定位   提供程序配置文件名为   META-INF / services / javax.annotation.processing.Processor   在搜索路径上。这样的文件应该   包含任何注释的名称   要使用的处理器,每个列出一个   线。或者,处理器可以是   使用   -处理器选项。 因此,您似乎需要在
META-INF/services
文件夹中创建一个名为
javax.annotation.processing.Processor
的文件,该文件列出了注释处理器的名称,每行一个。 编辑:因此,我相信读取批注的代码将类似于...
    for (Element element : roundEnv.getRootElements()) {
        State state = element.getAnnotation(State.class);
        if(state != null) {
            String stage = state.stage();
            System.out.println(\"The element \" + element + \" has stage \" + stage);
        }
    }
注释处理器的真实示例可以在这里找到。     

要回复问题请先登录注册