JDK 6和7(不是來自5的apt工具API)中的Java註釋處理API定義了註釋處理器的生命週期。其中一個通過無參數構造函數實例化,init
方法通過ProcessingEnvironment
實例調用,然後通過process
方法使用該處理器。如果適用,只有一個處理器實例在整個後續處理循環中製作和使用。跨編譯輪次的處理環境成員的一致性
由於我的處理器類變得有點臃腫,我創建了它應該處理的單獨註釋的處理程序類。在這些類的方法中,我總是通過Elements
和Types
傳遞我從ProcessingEnvironment
獲得的實用方法的實例。這使我的方法簽名相當長。
我寧願在處理程序中以及在處理器實例中保留對Elements
和Types
實例的引用。我通過將ProcessingEnvironment
傳入init
方法來完成此操作。現在,我想知道這是否安全。對於Processor
的JavaDoc明確指出某些方法僅針對處理器調用一次,但此處未提及init
。我有點認爲這是隱含的理解,但我不是100%確定的。
我也想知道,Messager
實例,也可以從ProcessingEnvironment
獲得,並且在所有處理循環中保持不變。我寧願沒有警告/錯誤從一輪出現,但其他人被排除在外。我有理由相信,在各輪中使用相同的實例應該是安全的,但只是想確定一些。
好點...我不知道爲什麼他們不只是通過構造函數傳遞的,而是要經過一些init方法。設計約束,也許?無論如何,我在初始化初始化處理程序並給他們參考保存的實用程序。如果init被多次調用,會有點問題......我不能讓處理程序被替換,因爲它們保持了各個狀態的狀態。也許我可以讓init更新處理程序的工具參考。由於Eclipse的警告,你給了我一些想法。 –