假设我有一个像这样的类结构:
@MyAnnotationOne
class A {
private String id;
private B b;
public static class B {
private C c;
@MyAnnoationOne
public static class C {
@MyAnnotationTwo
private String annotatedString;
}
}
}
我正在使用注释处理来生成代码。如果我正在处理@MyAnnotationOne,则可以使用Mirror API获得A类和C类中的所有字段。
我想知道是否可以找到类A中沿层次结构向下包含注解@MyAnnotationOne或@MyAnnotationTwo的任何字段。找到任何一个就足够了。
我试图寻找一种解决方案,但是我发现有人说,由于注释处理发生在预编译阶段,因此该信息可能不可用。如果您有任何解决方案,请告诉我。这将是很大的帮助。
答案 0 :(得分:0)
您可以配置注释是否保留在运行时中。您可以使用java.lang.annotation.Retention
元注释来注释自己的注释类型,并指定枚举java.lang.annotation.RetentionPolicy
中的值之一。
RUNTIME
注释由编译器记录在类文件中,并在运行时由VM保留,以便可以通过反射方式读取。
CLASS
注释由编译器记录在类文件中,但VM在运行时无需保留。
SOURCE
批注将被编译器丢弃。
编辑 如果要构建注释处理器:
javax.lang.model...
和javax.annotation.processing
如果您覆盖javax.annotation.processing.AbstractProcessor.process()
,则会收到RoundEnvironment
,其中包含用于获取模型Element
的方法,包括通过特定注释类型过滤的集合。给定Element
后,您可以getEnclosedElements()
并在这些getAnnotation(annotationType)
上。