Annotazioni a Singolo Membro in Java

Concetti Chiave
  • Le annotazioni a singolo membro in Java consentono una sintassi più concisa quando si specifica il valore di un membro.
  • Per utilizzare questa forma abbreviata, il nome del membro deve essere value.
  • Un'annotazione a singolo membro può essere applicata semplicemente specificando il valore del membro, senza dover indicare il nome del membro stesso.
  • Se un'annotazione ha altri membri, questi devono avere valori predefiniti per poter utilizzare la sintassi a singolo membro.

Annotazioni a Singolo Membro

Un'annotazione a singolo membro contiene solo un membro.

Funziona come un'annotazione normale tranne per il fatto che consente una forma abbreviata per specificare il valore del membro.

Quando è presente solo un membro, si può semplicemente specificare il valore per quel membro quando l'annotazione viene applicata; non è necessario specificare il nome del membro.

Tuttavia, per utilizzare questa forma abbreviata, il nome del membro deve essere value.

Ecco un esempio che crea e utilizza un'annotazione a singolo membro:

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

// Un'annotazione a singolo membro.
@Retention(RetentionPolicy.RUNTIME)
@interface AnnotazioneSingolo {
    // il nome di questa variabile deve essere value
    int value();
}

class Singolo {

    // Annota un metodo utilizzando un'annotazione a singolo membro.
    @AnnotazioneSingolo(100)
    public static void mioMetodo() {
        Singolo ob = new Singolo();
        try {
            Method m = ob.getClass().getMethod("mioMetodo");
            AnnotazioneSingolo anno = m.getAnnotation(AnnotazioneSingolo.class);
            System.out.println(anno.value()); // visualizza 100
        } catch (NoSuchMethodException exc) {
            System.out.println("Metodo Non Trovato.");
        }
    }

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

Come previsto, questo programma visualizza il valore 100. Nel programma, @AnnotazioneSingolo viene utilizzato per annotare mioMetodo(), come mostrato qui:

@AnnotazioneSingolo(100)

Notiamo che value = non deve essere specificato.

Si può utilizzare la sintassi a valore singolo quando si applica un'annotazione che ha altri membri, ma quegli altri membri devono tutti avere valori predefiniti.

Ad esempio, qui il valore xyz viene aggiunto, con un valore predefinito di zero:

@interface AltriMembri {
    int value();
    int xyz() default 0;
}

Nei casi in cui si vuole utilizzare il valore predefinito per xyz, si può applicare @AltriMembri, come mostrato di seguito, semplicemente specificando il valore di value utilizzando la sintassi a singolo membro.

@AltriMembri(88)

In questo caso, xyz assume il valore predefinito zero, e value ottiene il valore 88. Ovviamente, per specificare un valore diverso per xyz è necessario che entrambi i membri siano esplicitamente nominati, come mostrato qui:

@AltriMembri(value = 88, xyz = 99)

Ricordiamo, ogni volta che si utilizza un'annotazione a singolo membro, il nome di quel membro deve essere value.