我創建了一個非常通用的註釋處理器(例如xjc),它可以掃描我的源並根據它生成額外的類。理想情況下,特定領域的庫應該依賴於註釋處理器庫(它不知道域)。在庫類中的枚舉佔位符
我在註釋處理器中放置的兩個字段是minVersion和maxVersion。該守則將是這個樣子:
@ProcessMe(minVersion=Version.1_3_5, maxVersion=Version.1_5)
private Foo fieldFoo;
的目標將是註釋處理器創建一個對象只做特別處理,如果請求的版本是1.3.5和1.5之間。
不幸的是,對於這個工作,註釋處理器需要了解@ProcessMe
和@ProcessMe
需要了解Version
和Version
是特定領域。
我最初的想法是,我將有一個版本實現的VersionInfo接口(我需要的是能夠枚舉可能的值並比較它們)。不幸的是,即使VersionInfo擴展了枚舉,我也無法在註釋中指定它,因爲註釋只能包含上述的基元,字符串,類,註釋,枚舉和一維數組。
那麼,任何人都可以想出一種方法來使這項工作不需要註釋處理器具有特定領域的知識(該版本是特定領域的,因爲一個產品可能使用完全不同於其他產品的版本控制方案)。
嗯......問題是註釋處理器在編譯之前看到代碼,所以即使我找到了ProcessorFilter的一個實例,我也無法實例化它。我想我可以重寫整個apt過程來使用Reflections,並在開始時加載它。另外,我可以有3個庫,通用處理器庫,特定於域的庫以及特定於領域的處理器插件。這給了我一些想法。 – Pace
@Pace,祝你好運。註釋處理的實施是非常艱苦的工作。 – AlexR