Annotazioni Marker in Java

Concetti Chiave
  • Le annotazioni marker sono un tipo speciale di annotazione che non contiene membri e il loro unico scopo è marcare un elemento.
  • Per verificare la presenza di un'annotazione marker, si utilizza il metodo isAnnotationPresent() definito dall'interfaccia AnnotatedElement.
  • Un'annotazione marker può essere applicata semplicemente utilizzando il suo nome, senza la necessità di parentesi vuote.

Annotazioni Marcatrici

Un'Annotazione marker o Annotazione marcatrice è un tipo speciale di annotazione che non contiene membri.

Il suo unico scopo è marcare un elemento. Quindi, la sua presenza come annotazione è sufficiente. Il modo migliore per determinare se un'annotazione marker è presente è utilizzare il metodo isAnnotationPresent(), che è definito dall'interfaccia AnnotatedElement.

Ecco un esempio che utilizza un'annotazione marker. Poiché un'interfaccia marcatore non contiene membri, semplicemente determinare se è presente o assente è sufficiente.

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

// Un'annotazione marcatore.
@Retention(RetentionPolicy.RUNTIME)
@interface MioMarcatore {
}

class Marcatore {

    // Annota un metodo utilizzando un marcatore.
    // Nota che non sono necessarie le ().
    @MioMarcatore
    public static void mioMetodo() {
        Marcatore ob = new Marcatore();
        try {
            Method m = ob.getClass().getMethod("mioMetodo");

            // Determina se l'annotazione è presente.
            if(m.isAnnotationPresent(MioMarcatore.class))
                System.out.println("MioMarcatore è presente.");
        } catch (NoSuchMethodException exc) {
            System.out.println("Metodo Non Trovato.");
        }
    }

    public static void main(String[] args) {
        mioMetodo();
    }
}

L'output, mostrato qui, conferma che @MioMarcatore è presente:

MioMarcatore è presente.

Nel programma, notiamo che non è necessario seguire @MioMarcatore con le parentesi quando viene applicato. Quindi, @MioMarcatore viene applicato semplicemente utilizzando il suo nome, come questo:

@MioMarcatore

Non è sbagliato fornire un set vuoto di parentesi, ma non sono necessarie.