Java Annotations

Da Andreabont's Wiki.

In Java una annotazione è un modo per definire dei metadati su porzioni di codice (classi, metodi...) che saranno poi accessibili a run-time.

Annotazioni standard

Queste annotazioni sono fornite da Java e usate dal compilatore.

Annotazione Descrizione
@Override Applicabile su un metodo. Indica che è una riscrittura di un metodo della classe padre. Causa un errore a compile-time se non trova il metodo padre.
@Deprecated Applicabile su un metodo. Indica che il metodo è deprecato. Causa un avviso a compile-time se il metodo viene usato.
@SuppressWarnings Indica al compilatore di ignorare gli avvisi specificati.
@Retention Applicabile alle annotazioni. Indica dove salvare i dati delle annotazioni (Solo nel codice/Nella classe/Disponibile per la reflection)
@Documented Applicabile alle annotazioni. Include l'annotazione della documentazione.
@Target Applicabile alle annotazioni. Indica a quali elementi è applicabile l'annotazione.
@Inherited Applicabile alle annotazioni.
@SafeVarargs Indica al compilatore di ignorare gli avvisi sui varargs.
@FunctionalInterface Controlla che sia rispettata l'interfaccia per le funzioni.
@Repeatable Applicabile alle annotazioni. L'annotazione può essere applicata più volte.

Esempio

import java.lang.annotation.*;
import java.lang.reflect.*;

public class Main {

    @Retention(RetentionPolicy.RUNTIME)  // Permette accesso alla annotazione con la reflection a run-time
    @interface MiaAnnotazione {
        String testo1() default "Hello"; // Campo annotazione con valore di default
        String testo2();                 // Campo annotazione senza default
    }
    
    @MiaAnnotazione(testo2="world!")
    public void mioMetodo(String stringa) {
        // Codice
    }

    public static void main(String[] args) {

        Main object = new Main();
        Class myclass = object.getClass();
        
        try {
            Method method = myclass.getMethod("mioMetodo", String.class); // Ricerca metodo, definire anche i parametri accettati dal metodo
            MiaAnnotazione annotation = method.getAnnotation(MiaAnnotazione.class);
            System.out.println(annotation.testo1() + " " + annotation.testo2());
        } catch (NoSuchMethodException exc) {
            System.out.println("Method Not Found.");
        }

    }
}