gpt4 book ai didi

java - 注解处理编译步骤

转载 作者:太空宇宙 更新时间:2023-11-04 11:43:57 24 4
gpt4 key购买 nike

我在这篇文章(https://www.javacodegeeks.com/2015/01/how-to-process-java-annotations.html)中读到注释处理有多个轮次:

Annotation processing happens in separate stages, called rounds. During each round, a processor gets a chance to process the annotations it is interested in.

The annotations to process and the elements they are present on are available via the RoundEnvironment parameter passed into the process() method.

If annotation processors generate new source or class files during a round, then the compiler will make those available for processing in the next round. This continues until no more new files are generated.

The last round contains no input, and is thus a good opportunity to release any resources the processor may have acquired.

有人可以向我解释一下轮次是什么意思吗?例如,假设我们有一个注释 Metrics.java,当编译器解析 java 源代码时,它会首先找到所有使用该注释的元素,然后在编译结束时运行该特定 Metrics 注释的注释过程,其中传入的 RoundEnvironment 将包含所有具有 Metrics 注释的元素?

或者,只要编译器看到注释,如果它的保留类型为 ClassSource,它就会立即运行该注释。否则,直到运行时它才会运行该注释的注释,因为它的保留类型为 Runtime

最佳答案

据我所知,在解析java文件时,编译器会收集其中看到的所有注释,然后使用我们已经准备好的注释处理器(第一轮)来处理它们。假设注释处理器创建一个新的源文件(.java)并在其中使用了注释,这里编译器会解析该文件并收集其注释,然后使用注释处理器来处理它们(第二轮)。这样一直持续到最后一个java文件(是否通过注释处理器创建)中我们没有注释。注释处理是 javac 的一部分,我们应该要求启用它(我们有一些方法依赖于 maven、命令行、IDE 等环境)。注释处理不会通过满足源文件中的第一个注释而立即运行,并且保留策略也无关紧要。

关于java - 注解处理编译步骤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42516961/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com