Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

286
Vistas
¿Cómo obtengo todos los campos de registro y sus valores a través de la reflexión en Java 17?

Tuve una clase:

 class A { public final Integer orgId; }

Lo reemplacé con el registro en Java 17:

 record A (Integer orgId) { }

Además, tenía un código que hizo una validación a través de la reflexión que funciona con la clase normal, pero no funciona con los Registros:

 Field[] fields = obj.getClass().getFields(); //getting empty array here for the record for (Field field : fields) { }

¿Cuál sería la forma correcta de obtener los campos del objeto Record y sus valores a través de la reflexión en Java 17?

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Puedes usar el siguiente método:

 RecordComponent[] getRecordComponents()

Puede recuperar el nombre, el tipo, el tipo genérico, las anotaciones y su método de acceso desde RecordComponent .

Punto.java:

 record Point(int x, int y) { }

RecordDemo.java:

 import java.lang.reflect.RecordComponent; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; public class RecordDemo { public static void main(String args[]) throws InvocationTargetException, IllegalAccessException { Point point = new Point(10,20); RecordComponent[] rc = Point.class.getRecordComponents(); System.out.println(rc[0].getAccessor().invoke(point)); } }

Producción:

 10

Alternativamente,

 import java.lang.reflect.RecordComponent; import java.lang.reflect.Field; public class RecordDemo { public static void main(String args[]) throws IllegalArgumentException, IllegalAccessException, NoSuchFieldException { Point point = new Point(10, 20); RecordComponent[] rc = Point.class.getRecordComponents(); Field field = Point.class.getDeclaredField(rc[0].getAccessor().getName()); field.setAccessible(true); System.out.println(field.get(point)); } }
over 4 years ago · Santiago Trujillo Denunciar

0

Su class y record no son equivalentes: los registros tienen campos privados .

Class#getFields() solo devuelve campos públicos .

Podría usar Class#getDeclaredFields() en su lugar.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda