Annotazioni e Valori di Default in Java
- Ai campi delle annotazioni possono essere assegnati valori predefiniti che vengono utilizzati se non viene specificato alcun valore quando l'annotazione viene applicata.
- I valori predefiniti vengono specificati aggiungendo una clausola
default
alla dichiarazione di un membro dell'annotazione. - Un valore predefinito deve essere di un tipo compatibile con il tipo del membro dell'annotazione.
Utilizzo di Valori Predefiniti nelle Annotazioni
È possibile assegnare ai membri di un'annotazione valori predefiniti che verranno utilizzati se non viene specificato alcun valore quando l'annotazione viene applicata.
Un valore predefinito viene specificato aggiungendo una clausola default
alla dichiarazione di un membro. Ha questa forma generale:
tipo membro() default valore;
Qui, valore
deve essere di un tipo compatibile con tipo
.
Ecco un esempio di come si può utilizzare un valore predefinito in un'annotazione:
// Una dichiarazione di tipo annotazione che include valori predefiniti.
@Retention(RetentionPolicy.RUNTIME)
@interface MiaAnnotazione {
String str() default "Testing";
int val() default 9000;
}
Questa dichiarazione assegna un valore predefinito di "Testing"
a str
e 9000 a val
. Ciò significa che nessuno dei due valori deve essere specificato quando viene utilizzata @MiaAnnotazione
.
Tuttavia, uno o entrambi possono ricevere valori se desiderato. Pertanto, i seguenti sono i quattro modi in cui @MiaAnnotazione
può essere utilizzata:
// sia str che val utilizzano i valori predefiniti
@MiaAnnotazione()
// val utilizza il valore predefinito
@MiaAnnotazione(str = "qualche stringa")
// str utilizza il valore predefinito
@MiaAnnotazione(val = 100)
// nessun valore predefinito
@MiaAnnotazione(str = "Testing", val = 100)
Il seguente programma dimostra l'uso di valori predefiniti in un'annotazione.
import java.lang.annotation.*;
import java.lang.reflect.*;
// Una dichiarazione di tipo annotazione che include valori predefiniti.
@Retention(RetentionPolicy.RUNTIME)
@interface MiaAnno {
String str() default "Testing";
int val() default 9000;
}
class Meta3 {
// Annota un metodo utilizzando i valori predefiniti.
@MiaAnno()
public static void mioMetodo() {
Meta3 ob = new Meta3();
// Ottiene l'annotazione per questo metodo
// e visualizza i valori dei membri.
try {
Class<?> c = ob.getClass();
Method m = c.getMethod("mioMetodo");
System.out.println(anno.str() + " " + anno.val());
} catch (NoSuchMethodException exc) {
System.out.println("Method Not Found.");
}
}
public static void main(String[] args) {
mioMetodo();
}
}
L'output è mostrato di seguito:
Testing 9000