En mi experiencia desarrollando en Java, me he encontrado con situaciones donde necesito validar atributos similares en diferentes clases, como asegurar que un nombre contenga solo letras. Para evitar duplicar código, decidí explorar la creación de anotaciones personalizadas.
Java introdujo las anotaciones en la versión 5, permitiendo agregar metadatos directamente en el código. Estos metadatos, por sí solos, no hacen nada; necesitan ser procesados por la aplicación para tener efecto.
Por ejemplo, para validar que un usuario tenga una edad mínima, puedo crear una anotación @EdadMinima
y aplicarla al atributo fechaNacimiento
de la clase Usuario
:
public class Usuario {
private String nombre;
private String identidad;
@EdadMinima(valor = 18)
private LocalDate fechaNacimiento;
}
Para que Java reconozca esta anotación, debo definirla con @interface
y especificar su retención y objetivo:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface EdadMinima {
int valor();
}
Con esto, puedo usar reflexión en tiempo de ejecución para procesar la anotación y realizar la validación correspondiente. Este enfoque me permite escribir código más limpio y reutilizable, aplicando validaciones de manera declarativa y centralizada.