Utente:LoStrangolatore/Stubs/Annotazioni

Wikibooks, manuali e libri di testo liberi.
Il titolo di questa voce non è corretto per via delle caratteristiche del software MediaWiki. Il titolo corretto è Java/Annotazioni.

Java

Linguaggio Java
Linguaggio Java

categoria · sviluppo · modifica
Come posso contribuire?

→ Vai su Wikiversity

Java:  Guida alla programmazioneJava/Introduzione - Specifica di linguaggio - Libreria standardJava/Comunicazione seriale

Tipi di datoJava/Tipi di datoEspressioniJava/OperatoriVariabiliJava/Variabili localiIstruzioniJava/IstruzioniStrutture di controlloJava/Strutture di controlloPackageJava/Package
Classi e oggettiJava/Classi e oggettiOggettiJava/OggettiMetodiJava/MetodiMetodi (cont.)Java/Metodi/2ArrayJava/Array
Modificatori di accessoJava/Modificatori di accessoEreditarietàJava/Ereditarietà
Gestione delle eccezioniJava/Gestione delle eccezioniGenericsJava/Generics
Thread e parallelismoJava/MultithreadingInterblocco ricontrollatoJava/Interblocco ricontrollato
Alcune differenze con il CJava/Concetti fondamentaliLessicoJava/LessicoGrammaticaJava/Grammatica


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]

Sintassi[modifica]

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]

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 java.lang.annotation.ElementType(→ javadoc). È possibile marcare la dichiarazione di una classe o interfaccia, un campo, un metodo, un costruttore, un parametro oppure una variabile locale.

Annotazioni a cui la specifica di linguaggio dà un significato particolare[modifica]

Override, Deprecated, SuppressWarnings, ...

Leggere le annotazioni[modifica]

(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)