Annotazioni in Java Le annotazioni (annotation) sono meta-dati, ovvero dati che descrivono dati Possono essere usate per creare documentazione, per esprimere dipendenze sul codice e per effettuare controlli a run-time Javadoc lo strumento precursore delle annotazioni in Java Deniva @Deprecated, @author, @version Le annotazioni sono modicatori che si possono aggiungere su Dichiarazioni di package, tipi, costruttori, metodi, parametri e variabili Ing. E. Tramontana - Annotation - 25-Ott-06 2 Annotazioni Ci sono annotazioni predenite e altre possono essere denite dallutente Luso di metadati utile per Creare documentazione Effettuare controlli a compile-time, es. @Override Inserire dati che servono a far comprendere o ad analizzare automaticamente il codice Generare le di congurazione, etc. Ing. E. Tramontana - Annotation - 25-Ott-06 3 Tipi di annotazioni Una annotazione consiste del segno @ seguito dal nome dellannotazione Si pu fornire la coppia nome=valore per ulteriori dati Categorie di annotazioni Marker: senza variabili, es. @MarkerAnnotation Singolo valore: solo un valore fornito, es. @SingleValueAnnotation(valore) Full: tanti dati sono permessi, es. @FullAnnotation(var1=dato 1, var2=dato 2) i tipi di dato permessi sono quelli elementari, le stringhe ed i tipi enumerativi Ing. E. Tramontana - Annotation - 25-Ott-06 4 Annotazioni della JDK @Override Usata solo per i metodi Indica un metodo che override di uno della superclasse Il compilatore controlla e segnala un errore se non cos @Deprecated Indica un metodo che non dovrebbe essere usato Il compilatore segnala un errore quando il metodo invocato @SuppressWarnings(value={unchecked}) Evita che il compilatore comunichi dei warning, per lelemento annotato. Utile quando le Java collection sono usate senza tipo Il valore passato indica le warning da sopprimere, es. unchecked Ing. E. Tramontana - Annotation - 25-Ott-06 5 Denire nuove annotazioni Nuovi tipi di annotazioni si deniscono come le interfacce, ma con il segno @ Non sono permessi extends, throws, n parametri per i metodi Es. denizione @interface InProgress { String value(); } @interface Name { String first(); String last(); } Ing. E. Tramontana - Annotation - 25-Ott-06 6 Uso di annotazioni Nellesempio seguente, il metodo getText() annotato con InProgress e Name @InProgress("manca un parametro") @Name(first="K", last="Ishiguro") public String getText() { return text; } Ing. E. Tramontana - Annotation - 25-Ott-06 7 Denire Annotazioni Le annotazioni possono avere un valore di default, denito come segue @interface GroupTODO { public enum Severity {CRITICAL, IMPORTANT, TRIVIAL, DOCUMENTATION}; Severity severity() default Severity.IMPORTANT; String item(); String assignedTo(); String dateAssigned(); } Ing. E. Tramontana - Annotation - 25-Ott-06 8 Annotare le annotazioni Per alcune annotazioni necessario indicare ulteriori dati (ovvero meta-annotazioni) Es. per capire con quali elementi del programma posso usare una certa annotazione che denisco @Target si usa per indicare che @TODO si applica solo ai metodi @Target({ElementType.Method}) @interface TODO { String value(); } Ing. E. Tramontana - Annotation - 25-Ott-06 9 Retention e Documented Retention la meta-annotazione che permette di comunicare al compilatore come trattare le annotazioni Rimuovi le annotazioni dal .class (SOURCE) Tieni le annotazioni nel .class ma ignorale a runtime (CLASS) Tieni le annotazioni nel .class e leggile al caricamento della classe (RUNTIME) Es. @Retention(RetentionPolicy.SOURCE) @Documented comunica che lannotazione deve essere inclusa nel Javadoc della classe Una annotazione, per essere elaborata da javadoc, dovr avere inoltre @Retention(RetentionPolicy.RUNTIME)