Java 注释处理-如何访问(和修改)字段的内容

Java 注释处理-如何访问(和修改)字段的内容,java,annotations,annotation-processing,Java,Annotations,Annotation Processing,我正在尝试创建一个注释,该注释将更改注释字段的内容。到目前为止,这是我的注释: @Retention(RetentionPolicy.CLASS) @Target(ElementType.FIELD) public @interface MyAnnotation { String value(); } 我想这样使用它 public class MyClass { @MyAnnotation("test") String myField; } 然后我想在编译时将myField的值设

我正在尝试创建一个注释,该注释将更改注释字段的内容。到目前为止,这是我的注释:

@Retention(RetentionPolicy.CLASS)
@Target(ElementType.FIELD)
public @interface MyAnnotation {
  String value();
}
我想这样使用它

public class MyClass {
  @MyAnnotation("test")
  String myField;
}
然后我想在编译时将myField的值设置为“test”。我只是不知道如何从注释处理器访问注释字段,以及是否有可能在编译时更改其内容。这就是我的注释处理器现在的样子:

public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
  annotations.stream().flatMap(a -> roundEnv.getElementsAnnotatedWith(a).stream())
    .forEach(e -> {
      if (!String.class.getName().equals(((VariableElement) e).asType().toString())) {
        out.printMessage(Kind.ERROR
          , "@MyAnnotation annotation can only be applied to Strings", e);
      }
      else {
        // what to do here?
      }
  });
  return true;
}

公共布尔过程(设置使用注释处理应该很容易,例如,

你想在编译时设置它吗?我不知道你怎么做。你可以在运行时设置它,当然。好吧,如果不能在编译时完成,我真的不能在注释处理器中完成,对吗?所以我必须使用反射并将保留更改为运行时。好吧,你可以编译后可以操纵java字节码,但是,你需要使用反射并将RunTunes转换为运行时。看起来你基本上在寻找的是预处理器,比如C和C++,但是java没有。在你的特定查询中,我不确定你在分配字符串时有什么好处。谢谢。我想这可以清楚地解释它。我在C++中想这是多么容易的,所以这可能就是为什么我认为它必须在java中可能……我知道在我的例子中,我可以把值分配给字符串,但是我的下一步可能是希望用编译器ARG来操纵注释,但是现在没用了。我只能在运行时操作该字段。请将上下文添加到任何链接,以便您的答案是自包含的,这意味着答案需要在答案本身中。请参阅。如果您可以在此处用自己的话回答问题,并且链接仅作为参考,则会更好。