予本文(https://www.javacodegeeks.com/2015/01/how-to-process-java-annotations.html),該註釋處理具有多個輪中讀:註釋處理編譯步驟
註釋處理在獨立的階段發生,稱爲輪。在每一輪中,處理器都有機會處理它感興趣的註釋。
通過傳遞給process()方法的RoundEnvironment參數,可以處理註釋和它們出現的元素。
如果註釋處理器在一輪中生成新的源文件或類文件,那麼編譯器將使這些文件在下一輪中可供處理。這一直持續到不再生成新文件。
上一輪不包含任何輸入,因此是發佈處理器可能獲得的任何資源的好機會。
有人可以向我解釋什麼是輪迴?例如,假設我們有一個註釋Metrics.java
,當編譯器通過java源代碼解析時,它將首先找到所有使用此註釋的元素,然後在編譯結束時運行該註釋的註釋過程,其中傳入的RoundEnvironment
將包含所有具有Metrics
註釋的元素?
或者任何時候編譯器看到一個註釋,它將立即運行註釋,如果它的保留類型爲Class
或Source
。否則,由於它的保留類型爲Runtime
,它將不會運行該註釋直到運行時爲止?
據我所知,編譯器從來沒有看到註釋。它們在編譯器看到它們之前由註釋處理器處理。 –