¿Es posible recorrer los miembros de una clase en Java?
Pregunta
Tengo un DTO que tiene un montón de miembros. Me preguntaba si Java apoya la idea de un for (in) para la clase. No creo que lo haga, pero me ahorraría un montón de dolor si lo hiciera, así que pensé en arrojar la pregunta por ahí.
Solución
Bueno, puedes hacerlo con reflexión:
for (Field field : clazz.getFields())
{
...
}
(O el equivalente para métodos, etc.)
Puede obtener los valores de campo para una instancia específica o valores estáticos.
Otros consejos
Sin embargo, es un poco molesto.
Tienes que usar la reflexión.
Ver: Class.getDeclaredFieds ()
Devuelve una matriz de objetos Field que reflejan todos los campos declarados por la clase o interfaz representada por este objeto Class
Puede ver un ejemplo aquí
Hay tres formas de obtener un objeto Field de un objeto Class.
Class cls = java.awt.Point.class;
// By obtaining a list of all declared fields.
Field[] fields = cls.getDeclaredFields();
// By obtaining a list of all public fields,
// both declared and inherited.
fields = cls.getFields();
for (int i=0; i<fields.length; i++) {
Class type = fields[i].getType();
process(fields[i]);
}
// By obtaining a particular Field object.
// This example retrieves java.awt.Point.x.
try {
Field field = cls.getField("x");
process(field);
} catch (NoSuchFieldException e) {
}
Consulte la clase Clase definición para más opciones.
Sí, use el API de reflexión . En particular, verifique los métodos getFields
y getMethods
en Clase
.
Puede usar la reflexión para obtener todos los miembros y funciones.
Quizás deba preguntarse por qué ese DTO tiene tantos miembros que cree que esto es necesario. Podría ser el momento de refactorizar.
Eche un vistazo al marco de reflexión mediante el cual puede introspectar a la clase para obtener esta información.
http: / /java.sun.com/j2se/1.4.2/docs/api/java/lang/reflect/package-summary.html