2 回答

TA貢獻1765條經驗 獲得超5個贊
Java Annotation Processing (APT) 插件旨在基于其他類生成代碼。這些類最終位于生成的源文件夾中,該文件夾隨后也會被編譯。這些 APT 插件是從類路徑/構建工具配置中發現的,并且也由 IntelliJ 編譯器運行。請記?。篈PT 用于生成源代碼,根本不是用于替換現有類。Lombok 仍然能夠這樣做的唯一原因是因為他們非常深入地侵入了編譯器,并且通過這種方式能夠在編譯下操作類的 AST。
由于這種方法在未來的 Java 版本中存在很大爭議并且容易出錯,因此任何人都極不可能嘗試構建基于 APT 的類替換框架或能夠做到這一點的 Lombok 擴展(我們不是這是因為 Lombok 是唯一可以被視為此類 APT 使用的“框架”的工具,而 Lombok 本身根本不是以可擴展的方式構建的)。
總之:APT 可能是可行的方法,但您的處理器必須創建一個新類,而不是嘗試修改現有類。
我不確定為什么您當前的注釋處理器沒有與您的編譯器正確關聯。如果您使用的是 Maven,則可以嘗試在本地為您的處理器安裝工件,并將其作為編譯依賴項添加到您的其他項目中。
在 Java 中沒有修改編譯類的真正方法,所以如果你真的必須在同一個類中使用該方法,那么不幸的是,這意味著它無法完成。

TA貢獻1863條經驗 獲得超2個贊
您可以像 Lombok 一樣修改抽象語法樹 (AST),而不是實際創建文件并寫入文件。不建議這樣做,不同的編譯器以不同的方式實現 AST,但您可以從 github ( https://github.com/rzwitserloot/lombok )擴展 Lombok 源代碼,并在需要時制作注釋處理程序。但是,它有點難,因此請確保您確實需要它。
抱歉,我沒有正確閱讀您的問題。要注冊它,您需要在使用注釋和注釋處理器的項目中創建一個 META-INF\services 目錄。在該目錄中,制作一個名為“javax.annotation.processing.Processor”的 txt 文件,其中包含處理器的名稱,例如 mypackage.SuggestProcessor。如果您決定使用 java 9,您還可以在 module-info 文件中聲明處理器。處理器的模塊必須包含“provides javax.annotation.processing.Processor with something.SuggestProcessor”,使用注釋的模塊必須包含“uses javax.annotation.processing.Processor”。這就是 javac 注冊注釋處理器的方式。
添加回答
舉報