我正在编写自定义annotation processor
,并且一直在寻找一种访问annotated
类字段的字段的方法。所以我要上两节课
public class InnerClass {
private final String innerField = "String";
}
和
@CustomAnnotation
public class OuterClass {
private final InnerClass inner = new InnerClass();
}
我正在获取带注释的类OuterClass
,并且可以通过getEnclosedElements
访问其字段。但是可以通过某种方式访问InnerClass.innerField
吗?我已经看到一些注释,看起来像是从内部类获取字段,但找不到任何方法。
答案 0 :(得分:1)
您可以直接从TypeElement
获得Elements.getTypeElement
TypeElement te = elements.getTypeElement("yourpackage.InnerClass");
ElementFilter.fieldsIn(te.getEnclosedElements()).forEach(System.out::println);
如果您不知道InnerClass
的名称,并且需要从OuterClass
获取类型。您可以使用Types.asElement
从Element
中获取TypeMirror
Element outer = ...; // Get your outer class element
VariableElement field = ElementFilter.fieldsIn(outer.getEnclosedElements()).stream().findFirst().get();
Element inner = types.asElement(field.asType());
ElementFilter.fieldsIn(inner.getEnclosedElements()).forEach(System.out::println);