Storia della domanda:
Le annotazioni sono apparse in Java 5 per aggiungere metainformazioni al bytecode senza modificare la logica del programma stesso. Con le annotazioni è facile fornire ulteriori informazioni a classi e metodi per framework, compilatori o parser.
Problema:
Annotazioni progettate male o utilizzate in modo errato portano a una complicazione nella manutenzione del codice. A volte gli sviluppatori confondono l'applicabilità delle annotazioni o non capiscono come fare le proprie e non sanno della possibilità di fare annotazioni con parametri.
Soluzione:
Creazione di un'annotazione personalizzata:
import java.lang.annotation.*; @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface MyTest { String value() default ""; }
Utilizzo dell'annotazione:
public class TestClass { @MyTest("Esempio") public void testMethod() {...} }
Caratteristiche chiave:
Può un'annotazione ereditare da un'altra annotazione?
Risposta: No, le annotazioni in Java non supportano l'ereditarietà tra di loro.
È possibile rendere il lavoro di un'annotazione obbligatorio in tutti i sottoclassi di una classe?
Risposta: Non direttamente. È necessario controllare manualmente la presenza dell'annotazione tramite riflessione, implementando manualmente tale controllo.
In cosa differisce @Retention(Class) da @Retention(RUNTIME)?
Risposta:
Nel progetto si è deciso di sostituire la configurazione tramite xml con annotazioni, ma non è stata aggiunta @Retention(RUNTIME)
Vantaggi:
Svantaggi:
Abbiamo configurato un'annotazione personalizzata @Audit nei metodi, che controlla l'audit delle operazioni aziendali, con la riflessione della chiamata effettiva della logica sul server.
Vantaggi:
Svantaggi: