2 回答

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

TA貢獻(xiàn)1863條經(jīng)驗(yàn) 獲得超2個(gè)贊
您可以像 Lombok 一樣修改抽象語法樹 (AST),而不是實(shí)際創(chuàng)建文件并寫入文件。不建議這樣做,不同的編譯器以不同的方式實(shí)現(xiàn) AST,但您可以從 github ( https://github.com/rzwitserloot/lombok )擴(kuò)展 Lombok 源代碼,并在需要時(shí)制作注釋處理程序。但是,它有點(diǎn)難,因此請(qǐng)確保您確實(shí)需要它。
抱歉,我沒有正確閱讀您的問題。要注冊(cè)它,您需要在使用注釋和注釋處理器的項(xiàng)目中創(chuàng)建一個(gè) META-INF\services 目錄。在該目錄中,制作一個(gè)名為“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 注冊(cè)注釋處理器的方式。
添加回答
舉報(bào)