Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Solucionado (ver solución)
Solucionado
(ver solución)
1
respuesta

[Bug] Creando anotaciones en Java

Hola como están, estaba haciendo el ejercicio de ejemplo que plantea el artículo para crear anotaciones, en el método de validador cuando compara la edad calculada por la fecha de nacimiento y la edad minima con valor planteado, estaría mal escrita el nombre de la variable edadMinima, este mismo se encuentra en Mayúscula (la misma esta resaltado con** ):

public static <T> boolean validador(T objeto) {
   Class<?> clase = objeto.getClass();
   for (Field field : clase.getDeclaredFields()) {
      if (field.isAnnotationPresent(EdadMinima.class)) {
        EdadMinima edadMinima = field.getAnnotation(EdadMinima.class);
        try{
            field.setAccessible(true);
            LocalDate fechaNacimiento = (LocalDate) field.get(objeto);
            return Period.between(fechaNacimiento, LocalDate.now()).getYears() >= **EdadMinima**.valor();
         } catch (IllegalAccessException e) {
              e.printStackTrace();
         }
      }
   }
   return false;
}

Nos vemos

1 respuesta
solución!

Hola Ariel,

Gracias por compartir tu duda sobre la creación de anotaciones en Java. Entiendo que estás teniendo un problema con el nombre de la variable "edadMinima" en el método validador.

En el código que compartiste, parece que estás intentando acceder al valor de la anotación "EdadMinima" a través de la variable "edadMinima". Sin embargo, la forma correcta de acceder al valor de la anotación sería utilizando la sintaxis "edadMinima.valor()". Esto se debe a que "edadMinima" es una instancia de la anotación y "valor()" es el método que te permite obtener el valor definido en la anotación.

Aquí tienes una versión corregida del código:

public static <T> boolean validador(T objeto) {
   Class<?> clase = objeto.getClass();
   for (Field field : clase.getDeclaredFields()) {
      if (field.isAnnotationPresent(EdadMinima.class)) {
        EdadMinima edadMinima = field.getAnnotation(EdadMinima.class);
        try{
            field.setAccessible(true);
            LocalDate fechaNacimiento = (LocalDate) field.get(objeto);
            return Period.between(fechaNacimiento, LocalDate.now()).getYears() >= edadMinima.valor();
         } catch (IllegalAccessException e) {
              e.printStackTrace();
         }
      }
   }
   return false;
}

Espero que esta corrección resuelva tu problema. Si tienes alguna otra pregunta, no dudes en preguntar. ¡Buena suerte con tu ejercicio!

Espero haber ayudado y buenos estudios!

Si este post te ayudó, por favor, marca como solucionado ✓. Continúa con tus estudios! :)