【发布时间】:2017-07-19 21:48:29
【问题描述】:
我在这篇文章(https://www.javacodegeeks.com/2015/01/how-to-process-java-annotations.html) 中读到,Annotation Processing 有多个轮次:
注释处理发生在不同的阶段,称为轮次。在每一轮中,处理器都有机会处理它感兴趣的注释。
通过传递给 process() 方法的 RoundEnvironment 参数可以获得要处理的注释和它们所在的元素。
如果注释处理器在一轮中生成新的源文件或类文件,那么编译器将使这些文件可用于下一轮的处理。这种情况一直持续到不再生成新文件为止。
最后一轮不包含任何输入,因此是释放处理器可能已获取的任何资源的好机会。
有人可以向我解释一下回合是什么意思吗?例如,假设我们有一个注解 Metrics.java,当编译器解析 java 源代码时,它将首先找到使用该注解的所有元素,然后在编译结束时运行该特定 @987654323 的注解过程@注解,其中传入的RoundEnvironment将包含所有具有Metrics注解的元素?
或者,只要编译器看到一个注解,如果它的保留类型为Class 或Source,它就会立即运行该注解。否则它不会在运行时运行该注解的注解,因为它的保留类型为Runtime?
【问题讨论】:
-
据我了解,编译器永远不会看到注释。它们在编译器看到它们之前由注释处理器处理。
标签: java annotations