2012-01-24 28 views
9

Ciao: Volevo essere sicuro che un'annotazione fosse presente in fase di compilazione in una classe. È possibile ? Mi rendo conto che le annotazioni sono, loro stesse, delle classi, quindi presumo di sì - ma non sono proprio sicuro sintatticamente dove e come applicare/implementare una tale struttura nelle mie classi.Enforza annotazioni java in fase di compilazione

+0

Ho spesso visto i correttori di annotazioni usati come parte di una suite di test unitari. Funzionerebbe per te? – templatetypedef

+0

Bene: ho alcune costanti che devono essere ottenute dalle classi. Le classi hanno un brutto costruttore, quindi non posso farle rispettare usando getter. Quindi ho pensato di annotare la classe usando annotazioni con i parametri costanti come campi di annotazione. – jayunit100

risposta

14

È possibile scrivere un processore di annotazione per eseguire una logica arbitraria in fase di compilazione.

Da un processore di annotazione, è possibile eseguire operazioni come verificare se una classe ha una struttura o un membro specifici se esiste una specifica annotazione su tale classe. Sono abbastanza flessibili: per un'idea più precisa di cosa puoi fare con loro, controlla the API. Sono supportati anche nei principali IDE come Eclipse e Netbeans.

Un'introduzione alla scrittura di un processore di annotazione è here.

+0

Questa è una buona risposta. Aspetterò di vedere se c'è un livello più alto o un approccio più semplice (cioè un modo per far rispettare semplicemente questo codice/classi esistenti). – jayunit100

+0

Da quello che posso dire, il processore di annotazioni tralascia l'elaborazione su classi che non hanno già le annotazioni, il che non sembra essere quello che l'OP sta cercando. Sto cercando la stessa soluzione, quindi, se sbaglio, mi piacerebbe un esempio. –

+2

Se si utilizza @SupportedAnnotationTypes ("*") sul processore, questo raccoglierà tutte le classi, anche se non ci sono annotazioni su di esso. – prunge

Problemi correlati