Java注释处理器-字段

时间:2018-07-23 07:47:10

标签: java annotations

我正在编写自定义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吗?我已经看到一些注释,看起来像是从内部类获取字段,但找不到任何方法。

1 个答案:

答案 0 :(得分:1)

您可以直接从TypeElement获得Elements.getTypeElement

TypeElement te = elements.getTypeElement("yourpackage.InnerClass");
ElementFilter.fieldsIn(te.getEnclosedElements()).forEach(System.out::println);

如果您不知道InnerClass的名称,并且需要从OuterClass获取类型。您可以使用Types.asElementElement中获取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);