Utente:LoStrangolatore/Stubs/Annotazioni
Un'annotazione marca un elemento di programma per corredarlo di informazioni aggiuntive. Le informazioni aggiuntive sono chiamate metadati. Il tipo, il formato e il significato dei metadati dipendono dall'annotazione usata.
Il fatto che un elemento di programma sia annotato vuol dire semplicemente che esiste un tool che riconosce quella specifica annotazione e che è in grado di elaborare quei metadati.
Esempi
[modifica | modifica sorgente]Questa sezione è ancora vuota; aiutaci a scriverla! |
Sintassi
[modifica | modifica sorgente]Tecnicamente, una annotazione è un tipo particolare di interfaccia, definita con la scrittura @interface
invece di interface
. Tutte le annotazioni discendono dall'interfaccia java.lang.annotation.Annotation
Un'interfaccia che estenda Annotation
ma non sia definita con @interface
non è un'annotazione; Annotation
stessa non è un'annotazione in sé.
TODOLe annotazioni possono estendersi fra di loro? Possono estendere interfacce?
I membri delle annotazioni sono metodi privi di parametri (questo perché interessa solo assegnare loro un valore). Possono avere solo uno tra i seguenti tipi:
- java.lang.String
- java.lang.Class
- tipi primitivi
- annotazioni
- array di uno dei precedenti (pertanto non sono ammessi array di array[senza fonte])
Sono stati scelti apposta questi tipi perché, all'atto della marcatura, saranno passati come valori solo compile-time constants.
La marcatura avviene scrivendo di seguito il simbolo della chiocciola, seguito dal nome della annotazione, seguito dai parametri posti fra parentesi tonde, ciascuno nel formato nome=valore
. Se la lista di parametri è vuota, le parentesi possono essere omesse. Per convenzione, se un'annotazione prevede un unico parametro, esso dovrebbe chiamarsi value
; questo perché, se il nome di un parametro è vuoto, il compilatore sostituisce automaticamente il suo nome con value
. Per passare un array di lunghezza uno, è possibile omettere le parentesi dell'array.[senza fonte]
Caratteristiche
[modifica | modifica sorgente]La meta-annotazione @Documented
indica ai tool che generano documentazione che l'annotazione marcata dovrebbe essere inclusa nella documentazione generata.
La meta-annotazione @Inherited
indica che l'annotazione viene ereditata.
- Permanenza
La meta-annotazione @Retention
indica fino a che punto l'annotazione deve restare dal momento della scrittura del programma fino alla esecuzione. Essa ha solo un parametro il cui valore può essere
RetentionPolicy.SOURCE
: l'annotazione marcata va considerata solo all'interno del codice sorgente, cioè va scartata dal compilatore;RetentionPolicy.CLASS
: l'annotazione va compilata all'interno del bytecode, ma viene scartata dalla virtual machine al momento dell'esecuzione del programma;RetentionPolicy.RUNTIME
: l'annotazione va compilata all'interno del bytecode e viene anche portata in memoria durante l'esecuzione del programma.
- Elementi che è possibile marcare
Gli elementi che è possibile marcare sono individuati dalla enumerazione
. È possibile marcare la dichiarazione di una classe o interfaccia, un campo, un metodo, un costruttore, un parametro oppure una variabile locale.
java.lang.annotation.ElementType
Annotazioni a cui la specifica di linguaggio dà un significato particolare
[modifica | modifica sorgente]Questa sezione è ancora vuota; aiutaci a scriverla! |
Override, Deprecated, SuppressWarnings, ...
Leggere le annotazioni
[modifica | modifica sorgente]Questa sezione è ancora vuota; aiutaci a scriverla! |
(le tecniche diverse da adottare in base al contesto di utilizzo: sorgente ===> lettura del codice sorgente, ad es. usando uno dei programmi e librerie appositi già implementati apposta per estrarre le annotazioni, in particolare dare qualche cenno su 1. apt 2. il processor utilizzabile come parte di javac 3. il package javax.tools; classe ===> ???; runtime ===> reflection)