Le annotazioni sono state introdotte in Java 5 per fornire metadati che possono essere utilizzati dal compilatore e vari framework. Inizialmente, aiutavano gli strumenti (come JUnit o Hibernate) a interagire meglio con il codice senza dover scrivere configurazioni ripetitive o esterne.
Le annotazioni consentono di aggiungere informazioni a classi, metodi, campi, parametri e persino variabili locali. Durante la compilazione, a runtime o durante l'elaborazione del codice sorgente, possono essere utilizzate per la convalida, la generazione di file aggiuntivi o la modifica del comportamento del programma.
Per dichiarare una propria annotazione si utilizza la parola chiave @interface.
Esempio di codice:
@Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface MyAnnotation { String value(); } class Example { @MyAnnotation("Test") public void annotatedMethod() {} }
Caratteristiche chiave:
Le annotazioni influenzano solo il runtime?
No, le annotazioni possono essere limitate solo al codice sorgente (SOURCE), al bytecode (CLASS) o essere accessibili durante l'esecuzione (RUNTIME). La loro influenza dipende da RetentionPolicy.
@Retention(RetentionPolicy.SOURCE) public @interface SourceOnly {}
Possono i parametri delle annotazioni essere di qualsiasi tipo?
No, i tipi consentiti sono solo primitivi, stringhe, enumerazioni, altre annotazioni e array di questi tipi. Gli oggetti non possono essere utilizzati.
Le annotazioni possono essere ereditate?
Tecnicamente, le annotazioni non vengono ereditate come le classi. L'eccezione è un'annotazione con @Inherited, che si estende solo alle classi figlie (senza influenzare i metodi).
Un sviluppatore in un grande progetto ha creato decine di annotazioni diverse per l'automazione dei test, senza preoccuparsi di scriverle, documentarle e limitare il loro ambito. Di conseguenza, a un nuovo membro del team è stato difficile capire quali annotazioni funzionassero dove.
Vantaggi:
Svantaggi:
Nel team è stata implementata una rigorosa strategia per la scrittura delle proprie annotazioni: venivano aggiunte solo quelle necessarie, ognuna descritta in dettaglio, e ne veniva limitato l'ambito.
Vantaggi:
Svantaggi: