在注释处理环境中获取静态初始化程序

时间:2018-08-01 08:34:47

标签: java annotations annotation-processing

这里是javax.lang.model.element.ExecutableElement.getSimpleName()的Javadoc

  

返回构造函数,方法或初始化程序的简单名称。对于   构造函数,返回名称“ init”,为静态   初始化程序,将返回名称“ clinit” ,对于匿名用户   类或实例初始值设定项,则返回一个空名称。

请注意,粗体部分表示for a static initalizer,这意味着ExecutableElement可以代表static initalizer

那么如何在注释处理环境中获得静态初始化器?此外,这是否意味着我们可以在静态块上添加注释(尽管直到Java8才能添加注释)?

1 个答案:

答案 0 :(得分:1)

您不能注释静态初始化程序。但是您仍然可以访问它。

无论您如何访问,表示中的所有元素都可用。

例如如果注释包含静态初始值设定项的类,则将获得它的TypeElement表示形式,并且可以使用getEnclosedElements()获得所有字段,方法,构造函数和初始值设定项。

在循环中,您可以测试元素的种类。 对于静态初始化程序,请使用:

element.getKind() == ElementKind.STATIC_INIT

用于实例初始化程序

element.getKind() == ElementKind.INSTANCE_INIT

现在一个重要的问题是,您到底需要实现什么。如何使用初始化程序。

如果在批注处理期间访问它,则可能会发现有一个初始化程序,但仅此而已。例如。身体表示不可用。

如果要检查初始化程序的主体,则必须使用Java 8中引入的编译器插件API,使用TaskListener