Las anotaciones fueron añadidas en Java 5 para proporcionar metadatos que pueden ser utilizados por el compilador y diversos marcos. Originalmente ayudaban a herramientas (como JUnit o Hibernate) a interactuar mejor con el código sin la necesidad de escribir configuración repetitiva o externa.
Las anotaciones permiten añadir información a clases, métodos, campos, parámetros e incluso variables locales. En la etapa de compilación, en tiempo de ejecución o durante el procesamiento del código fuente, pueden ser utilizadas para validación, generación de archivos adicionales o modificación del comportamiento del programa.
Para declarar su propia anotación se utiliza la palabra clave @interface.
Ejemplo de código:
@Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface MyAnnotation { String value(); } class Example { @MyAnnotation("Test") public void annotatedMethod() {} }
Características clave:
¿Las anotaciones solo afectan en tiempo de ejecución?
No, las anotaciones pueden estar limitadas solo al código fuente (SOURCE), al bytecode (CLASS) o estar disponibles en tiempo de ejecución (RUNTIME). Su efecto depende de la RetentionPolicy.
@Retention(RetentionPolicy.SOURCE) public @interface SourceOnly {}
¿Pueden los parámetros de las anotaciones ser de cualquier tipo?
No, los tipos permitidos son solo primitivos, cadenas, enumeraciones, otras anotaciones y arreglos de estos tipos. No se pueden usar objetos.
¿Se pueden heredar las anotaciones?
Estrictamente hablando, las anotaciones no se heredan como las clases. La excepción es la anotación con @Inherited, que se aplica solo a las clases hijas (sin afectar a los métodos).
Un desarrollador en un gran proyecto creó decenas de anotaciones diferentes para automatizar pruebas, sin tomarse la molestia de documentarlas y limitar su ámbito. Como resultado, a un nuevo miembro del equipo le resultó difícil entender qué anotaciones funcionaban dónde.
Pros:
Contras:
El equipo implementó una estrategia estricta para escribir sus anotaciones: solo añadían las necesarias, describían cada una en detalle y limitaban su ámbito.
Pros:
Contras: