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í.

¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top